foundation_models/lib.rs
1#![doc = include_str!("../README.md")]
2//!
3//! ---
4//!
5//! # API Documentation
6//!
7//! Safe, idiomatic Rust bindings for Apple's [FoundationModels] framework —
8//! the on-device large language model that ships with Apple Intelligence.
9//!
10//! Generate text, hold multi-turn conversations, and stream tokens from the
11//! system language model on macOS 26.0+.
12//!
13//! [FoundationModels]: https://developer.apple.com/documentation/foundationmodels
14//!
15//! # Quick start
16//!
17//! ```rust,no_run
18//! use foundation_models::{LanguageModelSession, SystemLanguageModel};
19//!
20//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
21//! if !SystemLanguageModel::is_available() {
22//! eprintln!("Model unavailable: {:?}", SystemLanguageModel::availability());
23//! return Ok(());
24//! }
25//!
26//! let session = LanguageModelSession::new();
27//! let reply = session.respond("Name three Norse gods.")?;
28//! println!("{reply}");
29//! # Ok(())
30//! # }
31//! ```
32//!
33//! # Streaming
34//!
35//! ```rust,no_run
36//! use foundation_models::{LanguageModelSession, StreamEvent};
37//! use std::io::Write;
38//!
39//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
40//! let session = LanguageModelSession::new();
41//! session.stream("Tell me a haiku about Rust.", |event| match event {
42//! StreamEvent::Chunk(s) => {
43//! print!("{s}");
44//! std::io::stdout().flush().ok();
45//! }
46//! StreamEvent::Done => println!(),
47//! StreamEvent::Error(e) => eprintln!("\nstream error: {e}"),
48//! _ => {}
49//! })?;
50//! # Ok(())
51//! # }
52//! ```
53
54#![cfg_attr(docsrs, feature(doc_cfg))]
55
56pub mod error;
57pub mod ffi;
58pub mod generation;
59pub mod model;
60pub mod session;
61
62pub use error::{FMError, Unavailability};
63pub use generation::{GenerationOptions, SamplingMode};
64pub use model::{Availability, SystemLanguageModel};
65pub use session::{LanguageModelSession, StreamEvent};
66
67/// Common imports for users of this crate.
68pub mod prelude {
69 pub use crate::error::{FMError, Unavailability};
70 pub use crate::generation::{GenerationOptions, SamplingMode};
71 pub use crate::model::{Availability, SystemLanguageModel};
72 pub use crate::session::{LanguageModelSession, StreamEvent};
73}