pacha/lib.rs
1// Clippy configuration for pacha crate
2// Allow precision loss in size calculations (intentional for human-readable output)
3#![allow(clippy::cast_precision_loss)]
4#![allow(clippy::cast_possible_truncation)]
5#![allow(clippy::cast_sign_loss)]
6#![allow(clippy::cast_lossless)]
7// Allow similar names in complex algorithms
8#![allow(clippy::similar_names)]
9// Allow single char patterns where appropriate
10#![allow(clippy::single_char_pattern)]
11// Allow map().unwrap_or() pattern
12#![allow(clippy::map_unwrap_or)]
13// Allow unnested or-patterns for readability
14#![allow(clippy::unnested_or_patterns)]
15// Allow long literals (byte sequences, magic numbers)
16#![allow(clippy::unreadable_literal)]
17// Allow redundant closures for clarity
18#![allow(clippy::redundant_closure)]
19#![allow(clippy::redundant_closure_for_method_calls)]
20// Allow lifetime elision choices
21#![allow(clippy::needless_lifetimes)]
22// Allow Result wrapping for API consistency
23#![allow(clippy::unnecessary_wraps)]
24// Allow default trait usage patterns
25#![allow(clippy::default_trait_access)]
26// Allow format string style choices
27#![allow(clippy::uninlined_format_args)]
28// Allow consecutive replace for readability
29#![allow(clippy::collapsible_str_replace)]
30// Dead code warnings help identify unused functions
31// Individual items use #[allow(dead_code)] where needed
32// Doc backticks optional
33#![allow(clippy::doc_markdown)]
34// Allow unused async for future implementation
35#![allow(clippy::unused_async)]
36// Allow missing docs for internal items
37#![allow(clippy::missing_errors_doc)]
38#![allow(clippy::missing_panics_doc)]
39// Prefer expect() over unwrap() for better error messages
40// unwrap_used is enforced via clippy.toml disallowed-methods
41#![allow(clippy::unwrap_used)]
42#![allow(clippy::expect_used)]
43// Allow case-sensitive file extension checks (intentional)
44#![allow(clippy::case_sensitive_file_extension_comparisons)]
45// Allow manual Default implementations
46#![allow(clippy::derivable_impls)]
47// Allow field assignment patterns
48#![allow(clippy::field_reassign_with_default)]
49// Allow from_str method name (not trait impl)
50#![allow(clippy::should_implement_trait)]
51// Allow identical match arms for clarity
52#![allow(clippy::match_same_arms)]
53// Allow format in collect patterns
54#![allow(clippy::format_collect)]
55// Allow HashMap patterns
56#![allow(clippy::map_entry)]
57// Allow map_or patterns
58#![allow(clippy::option_if_let_else)]
59// Allow unused self for API consistency
60#![allow(clippy::unused_self)]
61// Allow pass-by-value for small types
62#![allow(clippy::needless_pass_by_value)]
63// Allow map_or simplification choices
64#![allow(clippy::unnecessary_map_or)]
65//! Pacha: Model, Data and Recipe Registry
66//!
67//! Pacha provides a unified registry for machine learning artifacts—models,
68//! datasets, and training recipes—with full lineage tracking, semantic
69//! versioning, and cryptographic integrity.
70//!
71//! # Quick Start
72//!
73//! ```no_run
74//! use pacha::prelude::*;
75//!
76//! // Open or create the registry
77//! let registry = Registry::open_default()?;
78//!
79//! // Register a model
80//! let model_data = std::fs::read("model.apr")?;
81//! let card = ModelCard::builder()
82//! .description("Fraud detection model")
83//! .metrics([("auc", 0.95), ("f1", 0.88)])
84//! .build();
85//!
86//! registry.register_model(
87//! "fraud-detector",
88//! &ModelVersion::new(1, 0, 0),
89//! &model_data,
90//! card,
91//! )?;
92//!
93//! // Retrieve the model
94//! let model = registry.get_model("fraud-detector", &ModelVersion::new(1, 0, 0))?;
95//! println!("Model stage: {}", model.stage);
96//! # Ok::<(), pacha::error::PachaError>(())
97//! ```
98//!
99//! # Architecture
100//!
101//! Pacha consists of three main registries:
102//!
103//! - **Model Registry** - `.apr` format files with metadata, metrics, and lineage
104//! - **Data Registry** - `.ald` format files with schema and provenance
105//! - **Recipe Registry** - TOML configs with hyperparameters and environment specs
106//!
107//! # Storage
108//!
109//! Pacha uses content-addressed storage with BLAKE3 hashing for:
110//! - Deduplication across versions
111//! - Tamper detection
112//! - Efficient delta storage
113//!
114//! Registry metadata is stored in `SQLite` at `~/.pacha/registry.db`.
115#[macro_use]
116#[allow(unused_macros, unused_variables)]
117mod generated_contracts;
118pub mod aliases;
119pub mod cache;
120pub mod catalog;
121pub mod cli;
122pub mod crypto;
123pub mod data;
124pub mod error;
125pub mod experiment;
126pub mod fetcher;
127pub mod format;
128pub mod lineage;
129pub mod manifest;
130pub mod model;
131pub mod prelude;
132pub mod recipe;
133pub mod registry;
134pub mod remote;
135pub mod resolver;
136pub mod signing;
137pub mod storage;
138pub mod uri;
139pub use error::{PachaError, Result};
140pub use registry::{Registry, RegistryConfig, StorageStats};