vv-agent 0.1.3

VectorVein agent runtime, SDK, CLI, tools, and workspace backends
Documentation
use std::path::Path;
use std::sync::Arc;

use crate::config::{build_vv_llm_from_local_settings, ResolvedModelConfig};
use crate::sdk::types::{AgentSDKOptions, SdkLlmClient};

pub(super) fn build_llm_from_options(
    options: &AgentSDKOptions,
    backend: &str,
    model: &str,
) -> Result<(SdkLlmClient, ResolvedModelConfig), String> {
    if let Some(builder) = &options.llm_builder {
        let (mut llm, resolved) = builder(
            options.settings_file.as_path(),
            backend,
            model,
            options.timeout_seconds,
        )?;
        apply_debug_dump_dir_to_llm(&mut llm, options.debug_dump_dir.as_deref());
        return Ok((llm, resolved));
    }
    let (mut llm, resolved) = build_vv_llm_from_local_settings(
        &options.settings_file,
        backend,
        model,
        options.timeout_seconds,
    )
    .map_err(|err| err.to_string())?;
    if let Some(debug_dump_dir) = &options.debug_dump_dir {
        llm = llm.with_debug_dump_dir(debug_dump_dir);
    }
    Ok((Arc::new(llm), resolved))
}

fn apply_debug_dump_dir_to_llm(llm: &mut SdkLlmClient, debug_dump_dir: Option<&str>) {
    let Some(debug_dump_dir) = debug_dump_dir else {
        return;
    };
    let debug_dump_dir = Path::new(debug_dump_dir);
    if let Some(configured_llm) = llm.clone_with_debug_dump_dir(debug_dump_dir) {
        *llm = configured_llm;
    } else {
        llm.set_debug_dump_dir(debug_dump_dir);
    }
}