Skip to main content

ai_model_directory_router/
lib.rs

1//! AI Model Directory Router
2//!
3//! Provider-aware AI model routing, filtering, exact cost calculation,
4//! fallback selection, and context-window management. The default `bundled`
5//! feature ships a dated models.dev provider catalog for offline use.
6//!
7//! # Quick Start
8//!
9//! ```
10//! use ai_model_directory_router::{route, RouteQuery, RouterStore};
11//!
12//! # #[cfg(feature = "bundled")]
13//! # {
14//! let store = RouterStore::bundled().unwrap();
15//!
16//! let query = RouteQuery {
17//!     provider: Some("openai".to_string()),
18//!     min_context: Some(128_000),
19//!     ..RouteQuery::default()
20//! };
21//!
22//! let result = route(&store, &query);
23//! for model in &result.models {
24//!     println!("{} (via {})", model.id, model.provider);
25//! }
26//! # }
27//! ```
28//!
29//! # Modules
30//!
31//! - [`store`] loads bundled, local, inline, or live provider catalogs
32//! - [`cost`] calculates per-token costs using exact decimal arithmetic
33//! - [`router`] filters, sorts, and paginates models by provider, price, context, features, and modalities
34//! - [`fallback`] generates scored alternative model chains
35//! - [`context`] checks if prompts fit within context windows
36//! - [`compare()`] produces field-by-field model comparisons with winners
37
38pub mod compare;
39pub mod context;
40pub mod cost;
41pub mod fallback;
42pub mod overlay;
43pub mod router;
44pub mod store;
45pub mod types;
46
47pub use compare::{compare, compare_models};
48pub use context::{check_context_fit, check_context_fit_for_provider, find_best_context_model};
49pub use cost::{calculate_cost_for_model, estimate_request_cost};
50pub use fallback::{fallback_chain, fallback_chain_for_provider};
51pub use overlay::{
52    apply_overlay, load_models_dev_from_file, parse_models_dev, ModelsDevCost, ModelsDevIndex,
53    ModelsDevLimit, ModelsDevModalities, ModelsDevModel, ModelsDevProvider, OverlayMode,
54    OverlayReport,
55};
56pub use router::route;
57#[cfg(feature = "online")]
58pub use store::MODELS_DEV_BODY_LIMIT;
59pub use store::{RouterStore, MODELS_DEV_API_URL};
60#[cfg(feature = "bundled")]
61pub use store::{
62    BUNDLED_MODELS_DEV_BYTE_COUNT, BUNDLED_MODELS_DEV_ETAG, BUNDLED_MODELS_DEV_MODEL_COUNT,
63    BUNDLED_MODELS_DEV_PROVIDER_COUNT, BUNDLED_MODELS_DEV_RETRIEVED_AT, BUNDLED_MODELS_DEV_SHA256,
64    BUNDLED_MODELS_DEV_SOURCE_REVISION,
65};
66pub use types::*;
67
68#[cfg(test)]
69mod tests;