alith_client/backend_builders/
perplexity.rs

1use 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
13// Everything here can be implemented for any struct.
14pub 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}