ai_lib/
lib.rs

1//! AI-lib: A Unified AI SDK for Rust
2//!
3//! This library provides a single, consistent interface for interacting with multiple AI model providers.
4//!
5//! # Quick Start
6//!
7//! ```rust
8//! use ai_lib::{AiClient, Provider, ChatCompletionRequest, Message, Role};
9//! use ai_lib::types::common::Content;
10//!
11//! #[tokio::main]
12//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
13//!     // Switch provider by changing Provider:: value
14//!     let client = AiClient::new(Provider::Groq)?;
15//!
16//!     let request = ChatCompletionRequest::new(
17//!         "llama3-8b-8192".to_string(),
18//!         vec![Message {
19//!             role: Role::User,
20//!             content: Content::Text("Hello, how are you?".to_string()),
21//!             function_call: None,
22//!         }],
23//!     );
24//!
25//!     println!("Client created successfully with provider: {:?}", client.current_provider());
26//!     println!("Request prepared for model: {}", request.model);
27//!
28//!     Ok(())
29//! }
30//! ```
31//!
32//! # Proxy Support
33//!
34//! AI-lib supports proxy configuration via environment variables:
35//!
36//! ```bash
37//! # Set proxy server
38//! export AI_PROXY_URL=http://proxy.example.com:8080
39//!
40//! # Proxy with authentication
41//! export AI_PROXY_URL=http://username:password@proxy.example.com:8080
42//!
43//! # HTTPS proxy
44//! export AI_PROXY_URL=https://proxy.example.com:8080
45//! ```
46//!
47//! All AI provider requests will automatically use the specified proxy server.
48
49pub mod api;
50pub mod client;
51pub mod config;
52pub mod metrics;
53pub mod provider;
54pub mod transport;
55pub mod types;
56pub mod utils; // minimal explicit configuration entrypoint
57
58// Resilience modules
59pub mod circuit_breaker;
60pub mod rate_limiter;
61pub mod error_handling;
62
63// Re-export main types for user convenience
64pub use api::ChatApi;
65pub use client::{AiClient, AiClientBuilder, ModelOptions, Provider};
66pub use types::{
67    AiLibError, ChatCompletionRequest, ChatCompletionResponse, Choice, Message, Role, Usage,
68};
69// Convenience re-exports: make the most-used types available from the crate root so
70// users don't need deep imports for common flows.
71pub use api::ChatCompletionChunk;
72pub use client::CancelHandle;
73pub use metrics::{Metrics, MetricsExt, NoopMetrics, NoopTimer, Timer};
74pub use transport::{
75    DynHttpTransport, DynHttpTransportRef, HttpClient, HttpTransport, TransportError,
76};
77// Re-export minimal configuration type
78pub use config::ConnectionOptions;
79pub use types::common::Content;
80
81// Re-export configuration types
82pub use provider::config::{FieldMapping, ProviderConfig};
83pub use provider::configs::ProviderConfigs;
84
85// Re-export model management tools
86pub use provider::models::{
87    CustomModelManager, LoadBalancingStrategy, ModelArray, ModelCapabilities, ModelEndpoint,
88    ModelInfo, ModelSelectionStrategy, PerformanceMetrics, PricingInfo, QualityTier, SpeedTier,
89};
90
91// Re-export batch processing functionality
92pub use api::chat::{batch_utils, BatchResult};
93
94// Re-export enhanced file utilities
95pub use utils::file::{
96    create_temp_dir, get_file_extension, get_file_size, guess_mime_from_path, is_audio_file,
97    is_file_size_acceptable, is_image_file, is_text_file, is_video_file, read_file, remove_file,
98    save_temp_file, validate_file,
99};