//! The [`LlmLayer`] trait: a Tower-style decorator over [`LlmProvider`].
use Arc;
use LlmProvider;
/// Wraps an inner [`LlmProvider`] in a new one, adding cross-cutting behaviour.
///
/// Analogous to `tower::Layer`, but specialised to the LLM provider trait so
/// that wrapped providers remain `LlmProvider`s — no `Service<Request>` generic
/// gymnastics or sprawling `where` clauses. Each layer's output is itself a
/// provider, so layers compose freely and the result is a single
/// `Arc<dyn LlmProvider>`.