pub struct ClaudeConfig {
pub provider: Provider,
pub model: ClaudeModel,
pub api_key: String,
pub max_tokens: u32,
pub enable_caching: bool,
pub cache_threshold: usize,
pub aws_region: Option<String>,
pub aws_access_key_id: Option<String>,
pub aws_secret_access_key: Option<String>,
pub gcp_project_id: Option<String>,
pub gcp_location: Option<String>,
pub gcp_credentials_path: Option<String>,
}
Fields§
§provider: Provider
§model: ClaudeModel
§api_key: String
§max_tokens: u32
§enable_caching: bool
§cache_threshold: usize
§aws_region: Option<String>
§aws_access_key_id: Option<String>
§aws_secret_access_key: Option<String>
§gcp_project_id: Option<String>
§gcp_location: Option<String>
§gcp_credentials_path: Option<String>
Implementations§
Source§impl ClaudeConfig
impl ClaudeConfig
Sourcepub fn new(provider: Provider, model: ClaudeModel) -> Self
pub fn new(provider: Provider, model: ClaudeModel) -> Self
Examples found in repository?
examples/claude_providers_demo.rs (line 46)
4async fn main() -> Result<(), Box<dyn std::error::Error>> {
5 tracing_subscriber::fmt::init();
6
7 println!("=== Claude Multi-Provider Demo ===\n");
8 println!("This demo shows how to use the same model (e.g., Opus 4) across different providers\n");
9
10 // Example 1: Same model across different providers
11 println!("🚀 Using Claude 4 Opus across different providers:");
12
13 // Anthropic API
14 println!("1. Anthropic API:");
15 let anthropic_config = ClaudeConfig::anthropic(
16 "your-anthropic-api-key".to_string(),
17 ClaudeModel::Opus4
18 );
19 let _anthropic_client = ClaudeClient::new(anthropic_config.clone());
20 println!(" Model: {} ({})", ClaudeModel::Opus4.display_name(), anthropic_config.get_model_for_provider());
21 println!(" Provider: Anthropic\n");
22
23 // AWS Bedrock - Same model, different provider
24 println!("2. AWS Bedrock:");
25 let bedrock_config = ClaudeConfig::bedrock(
26 "us-east-1".to_string(),
27 ClaudeModel::Opus4 // Same model!
28 );
29 let _bedrock_client = ClaudeClient::new(bedrock_config.clone());
30 println!(" Model: {} ({})", ClaudeModel::Opus4.display_name(), bedrock_config.get_model_for_provider());
31 println!(" Provider: AWS Bedrock\n");
32
33 // GCP Vertex AI - Same model, different provider
34 println!("3. GCP Vertex AI:");
35 let vertex_config = ClaudeConfig::vertex(
36 "my-project".to_string(),
37 "us-central1".to_string(),
38 ClaudeModel::Opus4 // Same model!
39 );
40 let _vertex_client = ClaudeClient::new(vertex_config.clone());
41 println!(" Model: {} ({})", ClaudeModel::Opus4.display_name(), vertex_config.get_model_for_provider());
42 println!(" Provider: GCP Vertex AI\n");
43
44 // Example 2: Easy provider switching
45 println!("🔄 Easy provider switching with builder pattern:");
46 let base_config = ClaudeConfig::new(Provider::Anthropic, ClaudeModel::Sonnet4);
47
48 // Switch to Bedrock
49 let bedrock_config = base_config.clone()
50 .with_provider(Provider::AwsBedrock)
51 .with_model(ClaudeModel::Sonnet4); // Same model
52 println!(" Switched to Bedrock: {}", bedrock_config.get_model_for_provider());
53
54 // Switch to Vertex
55 let vertex_config = base_config.clone()
56 .with_provider(Provider::GcpVertex)
57 .with_model(ClaudeModel::Sonnet4); // Same model
58 println!(" Switched to Vertex: {}", vertex_config.get_model_for_provider());
59
60 // Example 3: All available models
61 println!("\n📋 All available models:");
62 let models = [
63 ClaudeModel::Opus4,
64 ClaudeModel::Sonnet4,
65 ClaudeModel::Sonnet37,
66 ClaudeModel::Haiku35,
67 ClaudeModel::Sonnet35V2,
68 ClaudeModel::Sonnet35,
69 ClaudeModel::Opus3,
70 ClaudeModel::Sonnet3,
71 ClaudeModel::Haiku3,
72 ];
73
74 for model in &models {
75 println!(" {} - Anthropic: {}, Bedrock: {}, Vertex: {}",
76 model.display_name(),
77 model.anthropic_model_id(),
78 model.bedrock_model_id(),
79 model.vertex_model_id()
80 );
81 }
82
83 // Example 4: Default configuration
84 println!("\n🎯 Using default client:");
85 let _default_client = ClaudeClient::default();
86 println!(" Default model: {} via Anthropic", ClaudeModel::default().display_name());
87
88 println!("\n✅ Demo completed successfully!");
89 println!("Key benefits:");
90 println!(" • Abstract by model name, not platform-specific IDs");
91 println!(" • Easy provider switching with same model");
92 println!(" • Automatic model ID translation per provider");
93 println!(" • Builder pattern for configuration flexibility");
94
95 Ok(())
96}
Sourcepub fn anthropic(api_key: String, model: ClaudeModel) -> Self
pub fn anthropic(api_key: String, model: ClaudeModel) -> Self
Examples found in repository?
examples/claude_providers_demo.rs (lines 15-18)
4async fn main() -> Result<(), Box<dyn std::error::Error>> {
5 tracing_subscriber::fmt::init();
6
7 println!("=== Claude Multi-Provider Demo ===\n");
8 println!("This demo shows how to use the same model (e.g., Opus 4) across different providers\n");
9
10 // Example 1: Same model across different providers
11 println!("🚀 Using Claude 4 Opus across different providers:");
12
13 // Anthropic API
14 println!("1. Anthropic API:");
15 let anthropic_config = ClaudeConfig::anthropic(
16 "your-anthropic-api-key".to_string(),
17 ClaudeModel::Opus4
18 );
19 let _anthropic_client = ClaudeClient::new(anthropic_config.clone());
20 println!(" Model: {} ({})", ClaudeModel::Opus4.display_name(), anthropic_config.get_model_for_provider());
21 println!(" Provider: Anthropic\n");
22
23 // AWS Bedrock - Same model, different provider
24 println!("2. AWS Bedrock:");
25 let bedrock_config = ClaudeConfig::bedrock(
26 "us-east-1".to_string(),
27 ClaudeModel::Opus4 // Same model!
28 );
29 let _bedrock_client = ClaudeClient::new(bedrock_config.clone());
30 println!(" Model: {} ({})", ClaudeModel::Opus4.display_name(), bedrock_config.get_model_for_provider());
31 println!(" Provider: AWS Bedrock\n");
32
33 // GCP Vertex AI - Same model, different provider
34 println!("3. GCP Vertex AI:");
35 let vertex_config = ClaudeConfig::vertex(
36 "my-project".to_string(),
37 "us-central1".to_string(),
38 ClaudeModel::Opus4 // Same model!
39 );
40 let _vertex_client = ClaudeClient::new(vertex_config.clone());
41 println!(" Model: {} ({})", ClaudeModel::Opus4.display_name(), vertex_config.get_model_for_provider());
42 println!(" Provider: GCP Vertex AI\n");
43
44 // Example 2: Easy provider switching
45 println!("🔄 Easy provider switching with builder pattern:");
46 let base_config = ClaudeConfig::new(Provider::Anthropic, ClaudeModel::Sonnet4);
47
48 // Switch to Bedrock
49 let bedrock_config = base_config.clone()
50 .with_provider(Provider::AwsBedrock)
51 .with_model(ClaudeModel::Sonnet4); // Same model
52 println!(" Switched to Bedrock: {}", bedrock_config.get_model_for_provider());
53
54 // Switch to Vertex
55 let vertex_config = base_config.clone()
56 .with_provider(Provider::GcpVertex)
57 .with_model(ClaudeModel::Sonnet4); // Same model
58 println!(" Switched to Vertex: {}", vertex_config.get_model_for_provider());
59
60 // Example 3: All available models
61 println!("\n📋 All available models:");
62 let models = [
63 ClaudeModel::Opus4,
64 ClaudeModel::Sonnet4,
65 ClaudeModel::Sonnet37,
66 ClaudeModel::Haiku35,
67 ClaudeModel::Sonnet35V2,
68 ClaudeModel::Sonnet35,
69 ClaudeModel::Opus3,
70 ClaudeModel::Sonnet3,
71 ClaudeModel::Haiku3,
72 ];
73
74 for model in &models {
75 println!(" {} - Anthropic: {}, Bedrock: {}, Vertex: {}",
76 model.display_name(),
77 model.anthropic_model_id(),
78 model.bedrock_model_id(),
79 model.vertex_model_id()
80 );
81 }
82
83 // Example 4: Default configuration
84 println!("\n🎯 Using default client:");
85 let _default_client = ClaudeClient::default();
86 println!(" Default model: {} via Anthropic", ClaudeModel::default().display_name());
87
88 println!("\n✅ Demo completed successfully!");
89 println!("Key benefits:");
90 println!(" • Abstract by model name, not platform-specific IDs");
91 println!(" • Easy provider switching with same model");
92 println!(" • Automatic model ID translation per provider");
93 println!(" • Builder pattern for configuration flexibility");
94
95 Ok(())
96}
Sourcepub fn bedrock(aws_region: String, model: ClaudeModel) -> Self
pub fn bedrock(aws_region: String, model: ClaudeModel) -> Self
Examples found in repository?
examples/claude_providers_demo.rs (lines 25-28)
4async fn main() -> Result<(), Box<dyn std::error::Error>> {
5 tracing_subscriber::fmt::init();
6
7 println!("=== Claude Multi-Provider Demo ===\n");
8 println!("This demo shows how to use the same model (e.g., Opus 4) across different providers\n");
9
10 // Example 1: Same model across different providers
11 println!("🚀 Using Claude 4 Opus across different providers:");
12
13 // Anthropic API
14 println!("1. Anthropic API:");
15 let anthropic_config = ClaudeConfig::anthropic(
16 "your-anthropic-api-key".to_string(),
17 ClaudeModel::Opus4
18 );
19 let _anthropic_client = ClaudeClient::new(anthropic_config.clone());
20 println!(" Model: {} ({})", ClaudeModel::Opus4.display_name(), anthropic_config.get_model_for_provider());
21 println!(" Provider: Anthropic\n");
22
23 // AWS Bedrock - Same model, different provider
24 println!("2. AWS Bedrock:");
25 let bedrock_config = ClaudeConfig::bedrock(
26 "us-east-1".to_string(),
27 ClaudeModel::Opus4 // Same model!
28 );
29 let _bedrock_client = ClaudeClient::new(bedrock_config.clone());
30 println!(" Model: {} ({})", ClaudeModel::Opus4.display_name(), bedrock_config.get_model_for_provider());
31 println!(" Provider: AWS Bedrock\n");
32
33 // GCP Vertex AI - Same model, different provider
34 println!("3. GCP Vertex AI:");
35 let vertex_config = ClaudeConfig::vertex(
36 "my-project".to_string(),
37 "us-central1".to_string(),
38 ClaudeModel::Opus4 // Same model!
39 );
40 let _vertex_client = ClaudeClient::new(vertex_config.clone());
41 println!(" Model: {} ({})", ClaudeModel::Opus4.display_name(), vertex_config.get_model_for_provider());
42 println!(" Provider: GCP Vertex AI\n");
43
44 // Example 2: Easy provider switching
45 println!("🔄 Easy provider switching with builder pattern:");
46 let base_config = ClaudeConfig::new(Provider::Anthropic, ClaudeModel::Sonnet4);
47
48 // Switch to Bedrock
49 let bedrock_config = base_config.clone()
50 .with_provider(Provider::AwsBedrock)
51 .with_model(ClaudeModel::Sonnet4); // Same model
52 println!(" Switched to Bedrock: {}", bedrock_config.get_model_for_provider());
53
54 // Switch to Vertex
55 let vertex_config = base_config.clone()
56 .with_provider(Provider::GcpVertex)
57 .with_model(ClaudeModel::Sonnet4); // Same model
58 println!(" Switched to Vertex: {}", vertex_config.get_model_for_provider());
59
60 // Example 3: All available models
61 println!("\n📋 All available models:");
62 let models = [
63 ClaudeModel::Opus4,
64 ClaudeModel::Sonnet4,
65 ClaudeModel::Sonnet37,
66 ClaudeModel::Haiku35,
67 ClaudeModel::Sonnet35V2,
68 ClaudeModel::Sonnet35,
69 ClaudeModel::Opus3,
70 ClaudeModel::Sonnet3,
71 ClaudeModel::Haiku3,
72 ];
73
74 for model in &models {
75 println!(" {} - Anthropic: {}, Bedrock: {}, Vertex: {}",
76 model.display_name(),
77 model.anthropic_model_id(),
78 model.bedrock_model_id(),
79 model.vertex_model_id()
80 );
81 }
82
83 // Example 4: Default configuration
84 println!("\n🎯 Using default client:");
85 let _default_client = ClaudeClient::default();
86 println!(" Default model: {} via Anthropic", ClaudeModel::default().display_name());
87
88 println!("\n✅ Demo completed successfully!");
89 println!("Key benefits:");
90 println!(" • Abstract by model name, not platform-specific IDs");
91 println!(" • Easy provider switching with same model");
92 println!(" • Automatic model ID translation per provider");
93 println!(" • Builder pattern for configuration flexibility");
94
95 Ok(())
96}
Sourcepub fn vertex(project_id: String, location: String, model: ClaudeModel) -> Self
pub fn vertex(project_id: String, location: String, model: ClaudeModel) -> Self
Examples found in repository?
examples/claude_providers_demo.rs (lines 35-39)
4async fn main() -> Result<(), Box<dyn std::error::Error>> {
5 tracing_subscriber::fmt::init();
6
7 println!("=== Claude Multi-Provider Demo ===\n");
8 println!("This demo shows how to use the same model (e.g., Opus 4) across different providers\n");
9
10 // Example 1: Same model across different providers
11 println!("🚀 Using Claude 4 Opus across different providers:");
12
13 // Anthropic API
14 println!("1. Anthropic API:");
15 let anthropic_config = ClaudeConfig::anthropic(
16 "your-anthropic-api-key".to_string(),
17 ClaudeModel::Opus4
18 );
19 let _anthropic_client = ClaudeClient::new(anthropic_config.clone());
20 println!(" Model: {} ({})", ClaudeModel::Opus4.display_name(), anthropic_config.get_model_for_provider());
21 println!(" Provider: Anthropic\n");
22
23 // AWS Bedrock - Same model, different provider
24 println!("2. AWS Bedrock:");
25 let bedrock_config = ClaudeConfig::bedrock(
26 "us-east-1".to_string(),
27 ClaudeModel::Opus4 // Same model!
28 );
29 let _bedrock_client = ClaudeClient::new(bedrock_config.clone());
30 println!(" Model: {} ({})", ClaudeModel::Opus4.display_name(), bedrock_config.get_model_for_provider());
31 println!(" Provider: AWS Bedrock\n");
32
33 // GCP Vertex AI - Same model, different provider
34 println!("3. GCP Vertex AI:");
35 let vertex_config = ClaudeConfig::vertex(
36 "my-project".to_string(),
37 "us-central1".to_string(),
38 ClaudeModel::Opus4 // Same model!
39 );
40 let _vertex_client = ClaudeClient::new(vertex_config.clone());
41 println!(" Model: {} ({})", ClaudeModel::Opus4.display_name(), vertex_config.get_model_for_provider());
42 println!(" Provider: GCP Vertex AI\n");
43
44 // Example 2: Easy provider switching
45 println!("🔄 Easy provider switching with builder pattern:");
46 let base_config = ClaudeConfig::new(Provider::Anthropic, ClaudeModel::Sonnet4);
47
48 // Switch to Bedrock
49 let bedrock_config = base_config.clone()
50 .with_provider(Provider::AwsBedrock)
51 .with_model(ClaudeModel::Sonnet4); // Same model
52 println!(" Switched to Bedrock: {}", bedrock_config.get_model_for_provider());
53
54 // Switch to Vertex
55 let vertex_config = base_config.clone()
56 .with_provider(Provider::GcpVertex)
57 .with_model(ClaudeModel::Sonnet4); // Same model
58 println!(" Switched to Vertex: {}", vertex_config.get_model_for_provider());
59
60 // Example 3: All available models
61 println!("\n📋 All available models:");
62 let models = [
63 ClaudeModel::Opus4,
64 ClaudeModel::Sonnet4,
65 ClaudeModel::Sonnet37,
66 ClaudeModel::Haiku35,
67 ClaudeModel::Sonnet35V2,
68 ClaudeModel::Sonnet35,
69 ClaudeModel::Opus3,
70 ClaudeModel::Sonnet3,
71 ClaudeModel::Haiku3,
72 ];
73
74 for model in &models {
75 println!(" {} - Anthropic: {}, Bedrock: {}, Vertex: {}",
76 model.display_name(),
77 model.anthropic_model_id(),
78 model.bedrock_model_id(),
79 model.vertex_model_id()
80 );
81 }
82
83 // Example 4: Default configuration
84 println!("\n🎯 Using default client:");
85 let _default_client = ClaudeClient::default();
86 println!(" Default model: {} via Anthropic", ClaudeModel::default().display_name());
87
88 println!("\n✅ Demo completed successfully!");
89 println!("Key benefits:");
90 println!(" • Abstract by model name, not platform-specific IDs");
91 println!(" • Easy provider switching with same model");
92 println!(" • Automatic model ID translation per provider");
93 println!(" • Builder pattern for configuration flexibility");
94
95 Ok(())
96}
Sourcepub fn get_model_for_provider(&self) -> String
pub fn get_model_for_provider(&self) -> String
Examples found in repository?
examples/claude_providers_demo.rs (line 20)
4async fn main() -> Result<(), Box<dyn std::error::Error>> {
5 tracing_subscriber::fmt::init();
6
7 println!("=== Claude Multi-Provider Demo ===\n");
8 println!("This demo shows how to use the same model (e.g., Opus 4) across different providers\n");
9
10 // Example 1: Same model across different providers
11 println!("🚀 Using Claude 4 Opus across different providers:");
12
13 // Anthropic API
14 println!("1. Anthropic API:");
15 let anthropic_config = ClaudeConfig::anthropic(
16 "your-anthropic-api-key".to_string(),
17 ClaudeModel::Opus4
18 );
19 let _anthropic_client = ClaudeClient::new(anthropic_config.clone());
20 println!(" Model: {} ({})", ClaudeModel::Opus4.display_name(), anthropic_config.get_model_for_provider());
21 println!(" Provider: Anthropic\n");
22
23 // AWS Bedrock - Same model, different provider
24 println!("2. AWS Bedrock:");
25 let bedrock_config = ClaudeConfig::bedrock(
26 "us-east-1".to_string(),
27 ClaudeModel::Opus4 // Same model!
28 );
29 let _bedrock_client = ClaudeClient::new(bedrock_config.clone());
30 println!(" Model: {} ({})", ClaudeModel::Opus4.display_name(), bedrock_config.get_model_for_provider());
31 println!(" Provider: AWS Bedrock\n");
32
33 // GCP Vertex AI - Same model, different provider
34 println!("3. GCP Vertex AI:");
35 let vertex_config = ClaudeConfig::vertex(
36 "my-project".to_string(),
37 "us-central1".to_string(),
38 ClaudeModel::Opus4 // Same model!
39 );
40 let _vertex_client = ClaudeClient::new(vertex_config.clone());
41 println!(" Model: {} ({})", ClaudeModel::Opus4.display_name(), vertex_config.get_model_for_provider());
42 println!(" Provider: GCP Vertex AI\n");
43
44 // Example 2: Easy provider switching
45 println!("🔄 Easy provider switching with builder pattern:");
46 let base_config = ClaudeConfig::new(Provider::Anthropic, ClaudeModel::Sonnet4);
47
48 // Switch to Bedrock
49 let bedrock_config = base_config.clone()
50 .with_provider(Provider::AwsBedrock)
51 .with_model(ClaudeModel::Sonnet4); // Same model
52 println!(" Switched to Bedrock: {}", bedrock_config.get_model_for_provider());
53
54 // Switch to Vertex
55 let vertex_config = base_config.clone()
56 .with_provider(Provider::GcpVertex)
57 .with_model(ClaudeModel::Sonnet4); // Same model
58 println!(" Switched to Vertex: {}", vertex_config.get_model_for_provider());
59
60 // Example 3: All available models
61 println!("\n📋 All available models:");
62 let models = [
63 ClaudeModel::Opus4,
64 ClaudeModel::Sonnet4,
65 ClaudeModel::Sonnet37,
66 ClaudeModel::Haiku35,
67 ClaudeModel::Sonnet35V2,
68 ClaudeModel::Sonnet35,
69 ClaudeModel::Opus3,
70 ClaudeModel::Sonnet3,
71 ClaudeModel::Haiku3,
72 ];
73
74 for model in &models {
75 println!(" {} - Anthropic: {}, Bedrock: {}, Vertex: {}",
76 model.display_name(),
77 model.anthropic_model_id(),
78 model.bedrock_model_id(),
79 model.vertex_model_id()
80 );
81 }
82
83 // Example 4: Default configuration
84 println!("\n🎯 Using default client:");
85 let _default_client = ClaudeClient::default();
86 println!(" Default model: {} via Anthropic", ClaudeModel::default().display_name());
87
88 println!("\n✅ Demo completed successfully!");
89 println!("Key benefits:");
90 println!(" • Abstract by model name, not platform-specific IDs");
91 println!(" • Easy provider switching with same model");
92 println!(" • Automatic model ID translation per provider");
93 println!(" • Builder pattern for configuration flexibility");
94
95 Ok(())
96}
Sourcepub fn with_provider(self, provider: Provider) -> Self
pub fn with_provider(self, provider: Provider) -> Self
Examples found in repository?
examples/claude_providers_demo.rs (line 50)
4async fn main() -> Result<(), Box<dyn std::error::Error>> {
5 tracing_subscriber::fmt::init();
6
7 println!("=== Claude Multi-Provider Demo ===\n");
8 println!("This demo shows how to use the same model (e.g., Opus 4) across different providers\n");
9
10 // Example 1: Same model across different providers
11 println!("🚀 Using Claude 4 Opus across different providers:");
12
13 // Anthropic API
14 println!("1. Anthropic API:");
15 let anthropic_config = ClaudeConfig::anthropic(
16 "your-anthropic-api-key".to_string(),
17 ClaudeModel::Opus4
18 );
19 let _anthropic_client = ClaudeClient::new(anthropic_config.clone());
20 println!(" Model: {} ({})", ClaudeModel::Opus4.display_name(), anthropic_config.get_model_for_provider());
21 println!(" Provider: Anthropic\n");
22
23 // AWS Bedrock - Same model, different provider
24 println!("2. AWS Bedrock:");
25 let bedrock_config = ClaudeConfig::bedrock(
26 "us-east-1".to_string(),
27 ClaudeModel::Opus4 // Same model!
28 );
29 let _bedrock_client = ClaudeClient::new(bedrock_config.clone());
30 println!(" Model: {} ({})", ClaudeModel::Opus4.display_name(), bedrock_config.get_model_for_provider());
31 println!(" Provider: AWS Bedrock\n");
32
33 // GCP Vertex AI - Same model, different provider
34 println!("3. GCP Vertex AI:");
35 let vertex_config = ClaudeConfig::vertex(
36 "my-project".to_string(),
37 "us-central1".to_string(),
38 ClaudeModel::Opus4 // Same model!
39 );
40 let _vertex_client = ClaudeClient::new(vertex_config.clone());
41 println!(" Model: {} ({})", ClaudeModel::Opus4.display_name(), vertex_config.get_model_for_provider());
42 println!(" Provider: GCP Vertex AI\n");
43
44 // Example 2: Easy provider switching
45 println!("🔄 Easy provider switching with builder pattern:");
46 let base_config = ClaudeConfig::new(Provider::Anthropic, ClaudeModel::Sonnet4);
47
48 // Switch to Bedrock
49 let bedrock_config = base_config.clone()
50 .with_provider(Provider::AwsBedrock)
51 .with_model(ClaudeModel::Sonnet4); // Same model
52 println!(" Switched to Bedrock: {}", bedrock_config.get_model_for_provider());
53
54 // Switch to Vertex
55 let vertex_config = base_config.clone()
56 .with_provider(Provider::GcpVertex)
57 .with_model(ClaudeModel::Sonnet4); // Same model
58 println!(" Switched to Vertex: {}", vertex_config.get_model_for_provider());
59
60 // Example 3: All available models
61 println!("\n📋 All available models:");
62 let models = [
63 ClaudeModel::Opus4,
64 ClaudeModel::Sonnet4,
65 ClaudeModel::Sonnet37,
66 ClaudeModel::Haiku35,
67 ClaudeModel::Sonnet35V2,
68 ClaudeModel::Sonnet35,
69 ClaudeModel::Opus3,
70 ClaudeModel::Sonnet3,
71 ClaudeModel::Haiku3,
72 ];
73
74 for model in &models {
75 println!(" {} - Anthropic: {}, Bedrock: {}, Vertex: {}",
76 model.display_name(),
77 model.anthropic_model_id(),
78 model.bedrock_model_id(),
79 model.vertex_model_id()
80 );
81 }
82
83 // Example 4: Default configuration
84 println!("\n🎯 Using default client:");
85 let _default_client = ClaudeClient::default();
86 println!(" Default model: {} via Anthropic", ClaudeModel::default().display_name());
87
88 println!("\n✅ Demo completed successfully!");
89 println!("Key benefits:");
90 println!(" • Abstract by model name, not platform-specific IDs");
91 println!(" • Easy provider switching with same model");
92 println!(" • Automatic model ID translation per provider");
93 println!(" • Builder pattern for configuration flexibility");
94
95 Ok(())
96}
Sourcepub fn with_model(self, model: ClaudeModel) -> Self
pub fn with_model(self, model: ClaudeModel) -> Self
Examples found in repository?
examples/claude_providers_demo.rs (line 51)
4async fn main() -> Result<(), Box<dyn std::error::Error>> {
5 tracing_subscriber::fmt::init();
6
7 println!("=== Claude Multi-Provider Demo ===\n");
8 println!("This demo shows how to use the same model (e.g., Opus 4) across different providers\n");
9
10 // Example 1: Same model across different providers
11 println!("🚀 Using Claude 4 Opus across different providers:");
12
13 // Anthropic API
14 println!("1. Anthropic API:");
15 let anthropic_config = ClaudeConfig::anthropic(
16 "your-anthropic-api-key".to_string(),
17 ClaudeModel::Opus4
18 );
19 let _anthropic_client = ClaudeClient::new(anthropic_config.clone());
20 println!(" Model: {} ({})", ClaudeModel::Opus4.display_name(), anthropic_config.get_model_for_provider());
21 println!(" Provider: Anthropic\n");
22
23 // AWS Bedrock - Same model, different provider
24 println!("2. AWS Bedrock:");
25 let bedrock_config = ClaudeConfig::bedrock(
26 "us-east-1".to_string(),
27 ClaudeModel::Opus4 // Same model!
28 );
29 let _bedrock_client = ClaudeClient::new(bedrock_config.clone());
30 println!(" Model: {} ({})", ClaudeModel::Opus4.display_name(), bedrock_config.get_model_for_provider());
31 println!(" Provider: AWS Bedrock\n");
32
33 // GCP Vertex AI - Same model, different provider
34 println!("3. GCP Vertex AI:");
35 let vertex_config = ClaudeConfig::vertex(
36 "my-project".to_string(),
37 "us-central1".to_string(),
38 ClaudeModel::Opus4 // Same model!
39 );
40 let _vertex_client = ClaudeClient::new(vertex_config.clone());
41 println!(" Model: {} ({})", ClaudeModel::Opus4.display_name(), vertex_config.get_model_for_provider());
42 println!(" Provider: GCP Vertex AI\n");
43
44 // Example 2: Easy provider switching
45 println!("🔄 Easy provider switching with builder pattern:");
46 let base_config = ClaudeConfig::new(Provider::Anthropic, ClaudeModel::Sonnet4);
47
48 // Switch to Bedrock
49 let bedrock_config = base_config.clone()
50 .with_provider(Provider::AwsBedrock)
51 .with_model(ClaudeModel::Sonnet4); // Same model
52 println!(" Switched to Bedrock: {}", bedrock_config.get_model_for_provider());
53
54 // Switch to Vertex
55 let vertex_config = base_config.clone()
56 .with_provider(Provider::GcpVertex)
57 .with_model(ClaudeModel::Sonnet4); // Same model
58 println!(" Switched to Vertex: {}", vertex_config.get_model_for_provider());
59
60 // Example 3: All available models
61 println!("\n📋 All available models:");
62 let models = [
63 ClaudeModel::Opus4,
64 ClaudeModel::Sonnet4,
65 ClaudeModel::Sonnet37,
66 ClaudeModel::Haiku35,
67 ClaudeModel::Sonnet35V2,
68 ClaudeModel::Sonnet35,
69 ClaudeModel::Opus3,
70 ClaudeModel::Sonnet3,
71 ClaudeModel::Haiku3,
72 ];
73
74 for model in &models {
75 println!(" {} - Anthropic: {}, Bedrock: {}, Vertex: {}",
76 model.display_name(),
77 model.anthropic_model_id(),
78 model.bedrock_model_id(),
79 model.vertex_model_id()
80 );
81 }
82
83 // Example 4: Default configuration
84 println!("\n🎯 Using default client:");
85 let _default_client = ClaudeClient::default();
86 println!(" Default model: {} via Anthropic", ClaudeModel::default().display_name());
87
88 println!("\n✅ Demo completed successfully!");
89 println!("Key benefits:");
90 println!(" • Abstract by model name, not platform-specific IDs");
91 println!(" • Easy provider switching with same model");
92 println!(" • Automatic model ID translation per provider");
93 println!(" • Builder pattern for configuration flexibility");
94
95 Ok(())
96}
Trait Implementations§
Source§impl Clone for ClaudeConfig
impl Clone for ClaudeConfig
Source§fn clone(&self) -> ClaudeConfig
fn clone(&self) -> ClaudeConfig
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moreSource§impl Debug for ClaudeConfig
impl Debug for ClaudeConfig
Source§impl Default for ClaudeConfig
impl Default for ClaudeConfig
Source§impl KeyFromEnv for ClaudeConfig
impl KeyFromEnv for ClaudeConfig
Source§const KEY_NAME: &'static str = "ANTHROPIC_API_KEY"
const KEY_NAME: &'static str = "ANTHROPIC_API_KEY"
The environment variable name for this client’s API key
Source§fn find_key() -> Option<String>
fn find_key() -> Option<String>
Find the API key by checking environment variables first, then .env file
Source§fn find_key_with_user() -> String
fn find_key_with_user() -> String
Find the API key with user fallback - waits 15 seconds for user input then panics
Source§fn prompt_save_to_env() -> bool
fn prompt_save_to_env() -> bool
Prompt user if they want to save the API key to .env file
Uses single keystroke detection with fallback to Enter
Auto Trait Implementations§
impl Freeze for ClaudeConfig
impl RefUnwindSafe for ClaudeConfig
impl Send for ClaudeConfig
impl Sync for ClaudeConfig
impl Unpin for ClaudeConfig
impl UnwindSafe for ClaudeConfig
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