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};
#[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
}
}