aidale/lib.rs
1//! # Aidale
2//!
3//! Elegant Rust AI SDK inspired by OpenDAL's architecture.
4//!
5//! Aidale provides a unified, composable interface for interacting with multiple
6//! AI providers (OpenAI, Anthropic, etc.) with support for middleware layers
7//! and extensible plugins.
8//!
9//! ## Features
10//!
11//! - **Zero-cost abstractions**: Static dispatch during building, single type erasure at runtime
12//! - **Composable layers**: Stack multiple layers (logging, retry, caching, etc.)
13//! - **Plugin system**: Extend runtime behavior with hooks
14//! - **Type safety**: Leverage Rust's type system for correctness
15//! - **Async/await**: Full async support with tokio
16//!
17//! ## Quick Start
18//!
19//! ```toml
20//! [dependencies]
21//! aidale = { version = "0.1", features = ["openai", "layers"] }
22//! ```
23//!
24//! ```ignore
25//! use aidale::{RuntimeExecutor, Message, TextParams};
26//! use aidale::provider::OpenAiProvider;
27//! use aidale::layer::LoggingLayer;
28//!
29//! # async fn example() -> Result<(), Box<dyn std::error::Error>> {
30//! // Create provider
31//! let provider = OpenAiProvider::builder()
32//! .api_key("your-api-key")
33//! .build()?;
34//!
35//! // Build executor with layers
36//! let executor = RuntimeExecutor::builder(provider)
37//! .layer(LoggingLayer::new())
38//! .finish();
39//!
40//! // Generate text
41//! let params = TextParams::new(vec![
42//! Message::user("What is Rust?"),
43//! ]);
44//!
45//! let result = executor.generate_text("gpt-3.5-turbo", params).await?;
46//! println!("{}", result.content);
47//! # Ok(())
48//! # }
49//! ```
50//!
51//! ## Feature Flags
52//!
53//! - `default`: Includes `openai` provider
54//! - `openai`: OpenAI provider support
55//! - `providers`: All available providers
56//! - `layers`: Built-in layers (logging, retry, caching, etc.)
57//! - `plugins`: Built-in plugins (tool use, etc.)
58//! - `full`: All features enabled
59
60// Re-export core types and traits
61pub use aidale_core::*;
62
63// Re-export providers under `provider` module
64#[cfg(feature = "aidale-provider")]
65pub mod provider {
66 //! AI provider implementations.
67 pub use aidale_provider::*;
68}
69
70// Re-export layers under `layer` module
71#[cfg(feature = "aidale-layer")]
72pub mod layer {
73 //! Built-in middleware layers.
74 pub use aidale_layer::*;
75}
76
77// Re-export plugins under `plugin` module
78#[cfg(feature = "aidale-plugin")]
79pub mod plugin {
80 //! Built-in runtime plugins.
81 pub use aidale_plugin::*;
82}
83
84// Re-export schemars when schema feature is enabled
85#[cfg(feature = "schema")]
86pub mod schemars {
87 pub use ::schemars::*;
88}
89
90// Convenience re-exports at root level for common types
91pub use aidale_core::{
92 error::AiError,
93 layer::{Layer, LayeredProvider},
94 plugin::{Plugin, PluginPhase},
95 provider::Provider,
96 runtime::RuntimeExecutor,
97 types::{
98 ChatCompletionRequest, ChatCompletionResponse, Choice, ChoiceDelta, ContentPart,
99 FinishReason, Message, MessageDelta, ObjectParams, ObjectRequest, ObjectResponse,
100 ObjectResult, ProviderInfo, RequestContext, ResponseFormat, Role, TextChunk, TextParams,
101 TextRequest, TextResponse, TextResult, Tool, Usage,
102 },
103 Result,
104};
105
106/// Prelude module for convenient imports
107pub mod prelude {
108 //! Prelude module containing the most commonly used types and traits.
109 //!
110 //! ```
111 //! use aidale::prelude::*;
112 //! ```
113
114 pub use crate::{
115 AiError, ContentPart, FinishReason, Layer, Message, Plugin, Provider, Result, Role,
116 RuntimeExecutor, TextParams, Usage,
117 };
118
119 #[cfg(feature = "aidale-provider")]
120 pub use crate::provider::*;
121
122 #[cfg(feature = "aidale-layer")]
123 pub use crate::layer::*;
124
125 #[cfg(feature = "aidale-plugin")]
126 pub use crate::plugin::*;
127}