ferro_ai/lib.rs
1//! # ferro-ai
2//!
3//! AI structured classification and confirmation primitives for the Ferro framework.
4//!
5//! ## Classification
6//!
7//! Provider-abstracted wrapper for LLM structured JSON output with configurable
8//! schema, model selection, confidence threshold, and retry behavior.
9//!
10//! ```rust,ignore
11//! use ferro_ai::{Classifier, ClassifierConfig, AnthropicProvider};
12//! use serde::Deserialize;
13//! use std::sync::Arc;
14//!
15//! #[derive(Deserialize)]
16//! struct CommandIntent {
17//! action: String,
18//! confidence: f64,
19//! }
20//!
21//! let provider = AnthropicProvider::from_env().unwrap();
22//! let classifier = Classifier::<CommandIntent>::new(
23//! Arc::new(provider),
24//! ClassifierConfig::default(),
25//! );
26//! ```
27//!
28//! ## Confirmation
29//!
30//! State machine for gating destructive actions behind explicit user confirmation
31//! with configurable TTL expiry and event-driven observability.
32//!
33//! ```rust,ignore
34//! use ferro_ai::{InMemoryConfirmationStore, ConfirmationStore};
35//! use std::time::Duration;
36//!
37//! let store = InMemoryConfirmationStore::new();
38//! let payload = serde_json::json!({"action": "delete_user", "user_id": 42});
39//!
40//! store.request_confirmation("confirm-delete-42", payload, Duration::from_secs(60)).await?;
41//! let confirmed = store.confirm("confirm-delete-42").await?;
42//! ```
43
44pub mod classifier;
45pub mod confirmation;
46pub mod error;
47
48pub use classifier::anthropic::AnthropicProvider;
49pub use classifier::provider::ClassificationProvider;
50pub use classifier::{ClassificationResult, Classifier, ClassifierConfig};
51pub use confirmation::events::ConfirmationExpired;
52pub use confirmation::store::InMemoryConfirmationStore;
53pub use confirmation::{ConfirmationStore, PendingActionInfo};
54pub use error::Error;