Skip to main content

uor_addr/gguf/
pipeline.rs

1//! `gguf::address` — the GGUF realization's public entry point.
2//!
3//! 1. [`canonicalize`] parses the GGUF
4//!    v3 file and emits the flat canonical skeleton into an `alloc`
5//!    buffer (no count / width caps).
6//! 2. `AddressModel::forward` runs the shared ψ-tower: the skeleton
7//!    flows in as an ADR-060 `Borrowed` carrier and ψ₉ folds it through
8//!    `H = Sha256Hasher` to mint the κ-label.
9//! 3. [`AddressOutcome::from_grounded`] extracts the owned κ-label +
10//!    replayable TC-05 witness.
11//!
12//! GGUF canonicalization requires heap storage (entry sort scratch +
13//! the skeleton), so [`address`] is gated behind the `alloc` feature.
14
15pub use crate::outcome::{AddressOutcome, AddressWitness, VerifyError};
16
17/// Failure modes from [`address`].
18#[derive(Debug, Clone, Copy, PartialEq, Eq)]
19pub enum AddressFailure {
20    /// The input bytes are not a well-formed GGUF v3 file (bad magic,
21    /// unsupported version, truncation, over-rank tensor, over-deep array
22    /// nesting, invalid alignment, or an unknown / deprecated tensor
23    /// type).
24    InvalidGguf,
25    /// Defensive: foundation's catamorphism or a resolver returned a
26    /// shape violation. Unreachable for well-formed inputs.
27    PipelineFailure,
28}
29
30#[cfg(feature = "alloc")]
31use crate::gguf::model::{
32    AddressModel, AddressModelBlake3, AddressModelKeccak256, AddressModelSha3_256,
33    AddressModelSha512,
34};
35#[cfg(feature = "alloc")]
36use crate::gguf::value::{canonicalize, GgufCarrier};
37#[cfg(feature = "alloc")]
38use prism::pipeline::PrismModel;
39
40/// **uor-addr's gguf entry point** (σ-axis `Sha256Hasher`) — one
41/// ψ-pipeline content-address inference, yielding a `sha256:<64hex>`
42/// κ-label.
43///
44/// # Errors
45///
46/// - [`AddressFailure::InvalidGguf`] — the input is not well-formed.
47/// - [`AddressFailure::PipelineFailure`] — defensive; unreachable.
48#[cfg(feature = "alloc")]
49pub fn address(input_bytes: &[u8]) -> Result<AddressOutcome<71>, AddressFailure> {
50    let skeleton = canonicalize(input_bytes).map_err(|_| AddressFailure::InvalidGguf)?;
51    let grounded = AddressModel::forward(GgufCarrier::new(&skeleton))
52        .map_err(|_| AddressFailure::PipelineFailure)?;
53    AddressOutcome::<71>::from_grounded(&grounded).map_err(|_| AddressFailure::PipelineFailure)
54}
55
56/// The gguf entry point under σ-axis `Blake3Hasher` — yields a
57/// `blake3:<64hex>` κ-label. See [`address`] for the error contract.
58///
59/// # Errors
60///
61/// As [`address`].
62#[cfg(feature = "alloc")]
63pub fn address_blake3(input_bytes: &[u8]) -> Result<AddressOutcome<71>, AddressFailure> {
64    let skeleton = canonicalize(input_bytes).map_err(|_| AddressFailure::InvalidGguf)?;
65    let grounded = AddressModelBlake3::forward(GgufCarrier::new(&skeleton))
66        .map_err(|_| AddressFailure::PipelineFailure)?;
67    AddressOutcome::<71>::from_grounded(&grounded).map_err(|_| AddressFailure::PipelineFailure)
68}
69
70/// The gguf entry point under σ-axis `Sha3_256Hasher` — yields a
71/// `sha3-256:<64hex>` κ-label. See [`address`] for the error contract.
72///
73/// # Errors
74///
75/// As [`address`].
76#[cfg(feature = "alloc")]
77pub fn address_sha3_256(input_bytes: &[u8]) -> Result<AddressOutcome<73>, AddressFailure> {
78    let skeleton = canonicalize(input_bytes).map_err(|_| AddressFailure::InvalidGguf)?;
79    let grounded = AddressModelSha3_256::forward(GgufCarrier::new(&skeleton))
80        .map_err(|_| AddressFailure::PipelineFailure)?;
81    AddressOutcome::<73>::from_grounded(&grounded).map_err(|_| AddressFailure::PipelineFailure)
82}
83
84/// The gguf entry point under σ-axis `Keccak256Hasher` — yields a
85/// `keccak256:<64hex>` κ-label. See [`address`] for the error contract.
86///
87/// # Errors
88///
89/// As [`address`].
90#[cfg(feature = "alloc")]
91pub fn address_keccak256(input_bytes: &[u8]) -> Result<AddressOutcome<74>, AddressFailure> {
92    let skeleton = canonicalize(input_bytes).map_err(|_| AddressFailure::InvalidGguf)?;
93    let grounded = AddressModelKeccak256::forward(GgufCarrier::new(&skeleton))
94        .map_err(|_| AddressFailure::PipelineFailure)?;
95    AddressOutcome::<74>::from_grounded(&grounded).map_err(|_| AddressFailure::PipelineFailure)
96}
97
98/// The gguf entry point under σ-axis `Sha512Hasher` — yields a
99/// `sha512:<128hex>` κ-label (135 bytes, 64-byte fingerprint). See
100/// [`address`] for the error contract.
101///
102/// # Errors
103///
104/// As [`address`].
105#[cfg(feature = "alloc")]
106pub fn address_sha512(input_bytes: &[u8]) -> Result<AddressOutcome<135, 64>, AddressFailure> {
107    let skeleton = canonicalize(input_bytes).map_err(|_| AddressFailure::InvalidGguf)?;
108    let grounded = AddressModelSha512::forward(GgufCarrier::new(&skeleton))
109        .map_err(|_| AddressFailure::PipelineFailure)?;
110    AddressOutcome::<135, 64>::from_grounded(&grounded).map_err(|_| AddressFailure::PipelineFailure)
111}