Skip to main content

rullama_call_policy/
lib.rs

1#![deny(missing_docs)]
2//! Provider-layer resilience middleware for the rullama.
3//!
4//! Wraps any `rullama_core::Provider` with composable decorators:
5//!
6//! - [`RetryProvider`] — exponential backoff with jitter on transient failures.
7//! - [`BudgetProvider`] — atomic token/USD/round caps with pre-flight rejection.
8//! - [`CircuitBreakerProvider`] — half-open state machine, optional fallback.
9//!
10//! Decorators wrap `Arc<dyn Provider>` and return `Arc<dyn Provider>`, so they
11//! compose freely. Typical stacking (outermost first):
12//!
13//! ```text
14//! CircuitBreaker → Retry → Budget → base Provider
15//! ```
16
17mod budget;
18mod cache;
19mod circuit;
20mod classify;
21mod error;
22mod failover;
23mod retry;
24mod tokenizer;
25
26#[cfg(test)]
27mod tests_util;
28
29pub use budget::{BudgetConfig, BudgetGuard, BudgetProvider, KeyedBudgetGuard};
30#[cfg(feature = "cache")]
31pub use cache::SqliteCache;
32pub use cache::{
33    CacheBackend, CacheKey, CachedProvider, CachedResponse, MemoryCache, cache_key_for,
34};
35pub use circuit::{CircuitBreakerConfig, CircuitBreakerProvider, CircuitState};
36pub use classify::{ErrorClass, classify_error};
37pub use error::ResilienceError;
38pub use failover::FailoverProvider;
39pub use retry::{RetryPolicy, RetryProvider};
40#[cfg(feature = "tokenizers")]
41pub use tokenizer::{AnthropicTokenizer, OpenAiTokenizer};
42pub use tokenizer::{HeuristicTokenizer, Tokenizer};