llm_interface 0.0.3

llm_interface: The backend for the llm_client crate
Documentation
use super::{LlamaCppBackend, LlamaCppConfig};
use crate::llms::{
    api::{ApiConfig, LlmApiConfigTrait},
    local::{LlmLocalTrait, LocalLlmConfig},
    LlmBackend,
};
use llm_devices::{LoggingConfig, LoggingConfigTrait};
use llm_models::{GgufLoader, GgufLoaderTrait, GgufPresetLoader, GgufPresetTrait, HfTokenTrait};

// Everything here can be implemented for any struct.
#[derive(Default)]
pub struct LlamaCppBackendBuilder {
    pub config: LlamaCppConfig,
    pub local_config: LocalLlmConfig,
    pub llm_loader: GgufLoader,
}

impl LlamaCppBackendBuilder {
    pub async fn init(self) -> crate::Result<std::sync::Arc<LlmBackend>> {
        Ok(std::sync::Arc::new(LlmBackend::LlamaCpp(
            LlamaCppBackend::new(self.config, self.local_config, self.llm_loader).await?,
        )))
    }
}

impl LlmLocalTrait for LlamaCppBackendBuilder {
    fn config(&mut self) -> &mut LocalLlmConfig {
        &mut self.local_config
    }
}

impl LlmApiConfigTrait for LlamaCppBackendBuilder {
    fn api_base_config_mut(&mut self) -> &mut ApiConfig {
        &mut self.config.api_config
    }

    fn api_config(&self) -> &ApiConfig {
        &self.config.api_config
    }
}

impl LoggingConfigTrait for LlamaCppBackendBuilder {
    fn logging_config_mut(&mut self) -> &mut LoggingConfig {
        &mut self.config.logging_config
    }
}

impl GgufPresetTrait for LlamaCppBackendBuilder {
    fn preset_loader(&mut self) -> &mut GgufPresetLoader {
        &mut self.llm_loader.gguf_preset_loader
    }
}

impl GgufLoaderTrait for LlamaCppBackendBuilder {
    fn gguf_loader(&mut self) -> &mut GgufLoader {
        &mut self.llm_loader
    }
}

impl HfTokenTrait for LlamaCppBackendBuilder {
    fn hf_token_mut(&mut self) -> &mut Option<String> {
        &mut self.llm_loader.hf_loader.hf_token
    }

    fn hf_token_env_var_mut(&mut self) -> &mut String {
        &mut self.llm_loader.hf_loader.hf_token_env_var
    }
}