Skip to main content

deck_llm/
lib.rs

1//! deck-llm — LLM backend implementations.
2//!
3//! Phase 1 ships an [`OllamaBackend`] talking to a local Ollama daemon over
4//! HTTP. A `llama-cpp` in-process backend lives behind a `llama-cpp` feature
5//! flag and is wired in Phase 2.
6
7pub mod mock;
8pub mod ollama;
9
10pub use mock::MockBackend;
11pub use ollama::OllamaBackend;
12
13use deck_core::LlmBackend;
14
15/// Build a backend from a `[llm]` config block.
16///
17/// Errors if the backend identifier is unknown.
18pub fn from_config(cfg: &deck_core::config::LlmConfig) -> deck_core::Result<Box<dyn LlmBackend>> {
19    match cfg.backend.as_str() {
20        "ollama" => {
21            let b = OllamaBackend::new(
22                cfg.endpoint.clone(),
23                std::time::Duration::from_secs(cfg.timeout_secs),
24            )?;
25            Ok(Box::new(b))
26        }
27        "mock" => Ok(Box::new(MockBackend::default())),
28        other => Err(deck_core::DeckError::Llm(format!(
29            "unknown backend: {other}"
30        ))),
31    }
32}