alith_interface/llms/api/perplexity/
builder.rs1use 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}