alith_client/backend_builders/
perplexity.rs1use crate::LLMClient;
2use alith_devices::logging::{LoggingConfig, LoggingConfigTrait};
3use alith_interface::llms::{
4 LLMBackend,
5 api::{
6 config::{ApiConfig, LLMApiConfigTrait},
7 generic_openai::{GenericApiBackend, GenericApiConfig},
8 },
9};
10use alith_models::api_model::{ApiLLMModel, perplexity::PerplexityModelTrait};
11use std::sync::Arc;
12
13pub struct PerplexityBackendBuilder {
15 pub config: GenericApiConfig,
16 pub model: ApiLLMModel,
17}
18
19impl Default for PerplexityBackendBuilder {
20 fn default() -> Self {
21 let mut config = GenericApiConfig::default();
22 config.api_config.host = "api.perplexity.ai".to_string();
23 config.api_config.api_key_env_var = "PERPLEXITY_API_KEY".to_string();
24 config.logging_config.logger_name = "perplexity".to_string();
25 Self {
26 config,
27 model: ApiLLMModel::sonar_large(),
28 }
29 }
30}
31
32impl PerplexityBackendBuilder {
33 pub fn init(self) -> crate::Result<LLMClient> {
34 Ok(LLMClient::new(Arc::new(LLMBackend::GenericApi(
35 GenericApiBackend::new(self.config, self.model)?,
36 ))))
37 }
38}
39
40impl PerplexityModelTrait for PerplexityBackendBuilder {
41 fn model(&mut self) -> &mut ApiLLMModel {
42 &mut self.model
43 }
44}
45
46impl LLMApiConfigTrait for PerplexityBackendBuilder {
47 fn api_base_config_mut(&mut self) -> &mut ApiConfig {
48 &mut self.config.api_config
49 }
50
51 fn api_config(&self) -> &ApiConfig {
52 &self.config.api_config
53 }
54}
55
56impl LoggingConfigTrait for PerplexityBackendBuilder {
57 fn logging_config_mut(&mut self) -> &mut LoggingConfig {
58 &mut self.config.logging_config
59 }
60}