alith_client/backend_builders/
openai.rs

1use crate::LLMClient;
2use alith_devices::logging::{LoggingConfig, LoggingConfigTrait};
3use alith_interface::llms::{
4    LLMBackend,
5    api::{
6        config::{ApiConfig, LLMApiConfigTrait},
7        openai::{OpenAIBackend, OpenAIConfig},
8    },
9};
10use alith_models::api_model::{ApiLLMModel, openai::OpenAIModelTrait};
11use std::sync::Arc;
12
13// Everything here can be implemented for any struct.
14pub struct OpenAIBackendBuilder {
15    pub config: OpenAIConfig,
16    pub model: ApiLLMModel,
17}
18
19impl Default for OpenAIBackendBuilder {
20    fn default() -> Self {
21        Self {
22            config: Default::default(),
23            model: ApiLLMModel::gpt_4_o_mini(),
24        }
25    }
26}
27
28impl OpenAIBackendBuilder {
29    pub fn init(self) -> crate::Result<LLMClient> {
30        Ok(LLMClient::new(Arc::new(LLMBackend::OpenAI(
31            OpenAIBackend::new(self.config, self.model)?,
32        ))))
33    }
34}
35
36impl LLMApiConfigTrait for OpenAIBackendBuilder {
37    fn api_base_config_mut(&mut self) -> &mut ApiConfig {
38        &mut self.config.api_config
39    }
40
41    fn api_config(&self) -> &ApiConfig {
42        &self.config.api_config
43    }
44}
45
46impl OpenAIModelTrait for OpenAIBackendBuilder {
47    fn model(&mut self) -> &mut ApiLLMModel {
48        &mut self.model
49    }
50}
51
52impl LoggingConfigTrait for OpenAIBackendBuilder {
53    fn logging_config_mut(&mut self) -> &mut LoggingConfig {
54        &mut self.config.logging_config
55    }
56}