alith_interface/llms/api/perplexity/
builder.rs

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