1use schemars::JsonSchema;
2use serde::Deserialize;
3use serde::Serialize;
4
5use allms::{
6 llm::{
7 AnthropicModels, AwsBedrockModels, DeepSeekModels, GoogleModels, LLMModel, MistralModels,
8 OpenAIModels, PerplexityModels, XAIModels,
9 },
10 Completions,
11};
12
13#[derive(Deserialize, Serialize, JsonSchema, Debug, Clone)]
14struct TranslationResponse {
15 pub spanish: String,
16 pub french: String,
17 pub german: String,
18 pub polish: String,
19}
20
21#[tokio::main]
22async fn main() {
23 env_logger::init();
24
25 let instructions =
27 "Translate the following English sentence to all the languages in the response type: Rust is best for working with LLMs";
28
29 let model = AwsBedrockModels::try_from_str("amazon.nova-lite-v1:0")
32 .unwrap_or(AwsBedrockModels::NovaLite); println!("AWS Bedrock model: {:#?}", model.as_str());
34
35 let aws_completion = Completions::new(model, "", None, None);
36
37 match aws_completion
38 .get_answer::<TranslationResponse>(instructions)
39 .await
40 {
41 Ok(response) => println!("AWS Bedrock response: {:#?}", response),
42 Err(e) => eprintln!("Error: {:?}", e),
43 }
44
45 let openai_api_key: String = std::env::var("OPENAI_API_KEY").expect("OPENAI_API_KEY not set");
47 let model = OpenAIModels::try_from_str("gpt-5.4").unwrap_or(OpenAIModels::Gpt5_4); println!("OpenAI model: {:#?}", model.as_str());
49
50 let openai_completion = Completions::new(model, &openai_api_key, None, None);
51
52 match openai_completion
53 .get_answer::<TranslationResponse>(instructions)
54 .await
55 {
56 Ok(response) => println!("OpenAI Completions API response: {:#?}", response),
57 Err(e) => eprintln!("Error: {:?}", e),
58 }
59
60 let azure_openai_completion =
63 Completions::new(OpenAIModels::Gpt5_2, &openai_api_key, None, None)
64 .version("azure:2024-08-01-preview");
65 match azure_openai_completion
66 .get_answer::<TranslationResponse>(instructions)
67 .await
68 {
69 Ok(response) => println!("Azure OpenAI response: {:#?}", response),
70 Err(e) => eprintln!("Error: {:?}", e),
71 }
72
73 let anthropic_api_key: String =
75 std::env::var("ANTHROPIC_API_KEY").expect("ANTHROPIC_API_KEY not set");
76 let model = AnthropicModels::try_from_str("claude-haiku-4-5")
77 .unwrap_or(AnthropicModels::Claude4_5Haiku); println!("Anthropic model: {:#?}", model.as_str());
79
80 let anthropic_completion = Completions::new(model, &anthropic_api_key, None, None);
81
82 match anthropic_completion
83 .get_answer::<TranslationResponse>(instructions)
84 .await
85 {
86 Ok(response) => println!("Anthropic response: {:#?}", response),
87 Err(e) => eprintln!("Error: {:?}", e),
88 }
89
90 let mistral_api_key: String =
92 std::env::var("MISTRAL_API_KEY").expect("MISTRAL_API_KEY not set");
93 let model = MistralModels::try_from_str("mistral-medium-latest")
94 .unwrap_or(MistralModels::MistralMedium3_1); println!("Mistral model: {:#?}", model.as_str());
96
97 let mistral_completion = Completions::new(model, &mistral_api_key, None, None);
98
99 match mistral_completion
100 .get_answer::<TranslationResponse>(instructions)
101 .await
102 {
103 Ok(response) => println!("Mistral response: {:#?}", response),
104 Err(e) => eprintln!("Error: {:?}", e),
105 }
106
107 let model = GoogleModels::try_from_str("gemini-2.5-flash-lite")
109 .unwrap_or(GoogleModels::Gemini2_5FlashLite); println!("Google Gemini model: {:#?}", model.as_str());
111
112 let google_token_str: String =
113 std::env::var("GOOGLE_AI_STUDIO_API_KEY").expect("GOOGLE_AI_STUDIO_API_KEY not set");
114
115 let gemini_completion =
116 Completions::new(model, &google_token_str, None, None).version("google-studio");
117
118 match gemini_completion
119 .get_answer::<TranslationResponse>(instructions)
120 .await
121 {
122 Ok(response) => println!("Gemini response: {:#?}", response),
123 Err(e) => eprintln!("Error: {:?}", e),
124 }
125
126 let model = PerplexityModels::try_from_str("sonar-pro").unwrap_or(PerplexityModels::Sonar); println!("Perplexity model: {:#?}", model.as_str());
129
130 let perplexity_token_str: String =
131 std::env::var("PERPLEXITY_API_KEY").expect("PERPLEXITY_API_KEY not set");
132
133 let perplexity_completion = Completions::new(model, &perplexity_token_str, None, None);
134
135 match perplexity_completion
136 .get_answer::<TranslationResponse>(instructions)
137 .await
138 {
139 Ok(response) => println!("Perplexity response: {:#?}", response),
140 Err(e) => eprintln!("Error: {:?}", e),
141 }
142
143 let model =
145 DeepSeekModels::try_from_str("deepseek-chat").unwrap_or(DeepSeekModels::DeepSeekChat); println!("DeepSeek model: {:#?}", model.as_str());
147
148 let deepseek_token_str: String =
149 std::env::var("DEEPSEEK_API_KEY").expect("DEEPSEEK_API_KEY not set");
150
151 let deepseek_completion = Completions::new(model, &deepseek_token_str, None, None);
152
153 match deepseek_completion
154 .get_answer::<TranslationResponse>(instructions)
155 .await
156 {
157 Ok(response) => println!("DeepSeek response: {:#?}", response),
158 Err(e) => eprintln!("Error: {:?}", e),
159 }
160
161 let xai_api_key: String = std::env::var("XAI_API_KEY").expect("XAI_API_KEY not set");
163 let model = XAIModels::try_from_str("grok-3-mini").unwrap_or(XAIModels::Grok3Mini); println!("xAI Grok model: {:#?}", model.as_str());
165
166 let xai_completion = Completions::new(model, &xai_api_key, None, None);
167
168 match xai_completion
169 .get_answer::<TranslationResponse>(instructions)
170 .await
171 {
172 Ok(response) => println!("xAI Grok response: {:#?}", response),
173 Err(e) => eprintln!("Error: {:?}", e),
174 }
175}