[package] name = "kebab-llm-local" version = { workspace = true } edition = { workspace = true } rust-version = { workspace = true } license = { workspace = true } repository = { workspace = true } description = "Ollama HTTP adapter implementing kb_core::LanguageModel via reqwest::blocking" [dependencies] kebab-core = { path = "../kebab-core" } kebab-config = { path = "../kebab-config" } kebab-llm = { path = "../kebab-llm" } # `default-features = false` drops the `default-tls` (native-tls / openssl) # feature so we don't pull in a system OpenSSL; we explicitly pin rustls. # Note: `default-features = false` does NOT drop tokio — reqwest 0.12's # `blocking` feature internally wraps a private current-thread tokio # runtime, so `cargo tree -p kb-llm-local --edges normal | grep tokio` # will list tokio. The auditable invariant for this crate is "no # top-level tokio dep + no async surface (`async`/`await`/`tokio::*`) # exposed to callers" rather than "tokio absent from the tree". reqwest = { version = "0.12", default-features = false, features = ["blocking", "json", "rustls-tls"] } serde = { workspace = true, features = ["derive"] } serde_json = { workspace = true } tracing = { workspace = true } thiserror = { workspace = true } anyhow = { workspace = true } [dev-dependencies] # wiremock requires a tokio runtime to host the mock HTTP server. tokio # is also pulled transitively at runtime by reqwest's `blocking` feature # (private current-thread runtime); see the dependency comment above. # What we DO guarantee: this crate's source has zero `async`/`await`/ # `tokio::*` symbols, so the public/runtime API stays sync. wiremock = { workspace = true } tokio = { workspace = true, features = ["macros", "rt"] } [lints] workspace = true