llm 1.3.8

A Rust library unifying multiple LLM backends.
Documentation
use crate::{error::LLMError, LLMProvider};

use super::super::llm_builder::LLMBuilder;
use super::super::state::BuilderState;
use super::{backends, helpers, wrappers};

impl LLMBuilder {
    pub fn build(self) -> Result<Box<dyn LLMProvider>, LLMError> {
        self.state.build()
    }
}

impl BuilderState {
    pub(super) fn build(mut self) -> Result<Box<dyn LLMProvider>, LLMError> {
        helpers::log_builder_state(&self);
        let (tools, tool_choice) = helpers::validate_tool_config(&self)?;
        let backend = self
            .backend
            .take()
            .ok_or_else(|| LLMError::InvalidRequest("No backend specified".to_string()))?;

        let provider = backends::build_backend(&mut self, backend, tools, tool_choice)?;
        let provider = wrappers::wrap_with_validator(&mut self, provider)?;
        let provider = wrappers::wrap_with_resilience(&mut self, provider);
        let provider = wrappers::wrap_with_memory(&mut self, provider);
        Ok(provider)
    }
}