Skip to main content

oxirs_graphrag/model_loader/
mod.rs

1//! Pure-Rust GGUF model metadata loader and thread-safe model registry.
2//!
3//! This module is enabled by the `gguf-loader` Cargo feature.
4//!
5//! # Overview
6//!
7//! - [`GgufParser`] — reads the GGUF v2/v3 file header (magic, version,
8//!   key-value metadata, tensor shape/offset records) **without** loading
9//!   tensor weights into RAM.
10//! - [`ModelRegistry`] — a thread-safe `RwLock`-protected store of
11//!   [`ModelInfo`] records indexed by name-based [`ModelHandle`]s.
12//!
13//! Together these components provide the "model loading strategy" required by
14//! the LoRA phase-d fine-tuning scaffold: you can enumerate model architecture
15//! metadata (embedding dimension, vocab size, layer count, …) before committing
16//! to loading any weights, and the registry lets multiple threads share that
17//! metadata safely.
18//!
19//! # Example
20//!
21//! ```rust
22//! # #[cfg(feature = "gguf-loader")]
23//! # {
24//! use oxirs_graphrag::model_loader::{GgufParser, ModelRegistry};
25//!
26//! // Parse a minimal in-memory GGUF buffer (v3, 0 tensors, 0 kv entries):
27//! let mut buf = Vec::new();
28//! buf.extend_from_slice(&[0x47, 0x47, 0x55, 0x46]); // magic
29//! buf.extend_from_slice(&3u32.to_le_bytes());         // version 3
30//! buf.extend_from_slice(&0u64.to_le_bytes());         // n_tensors
31//! buf.extend_from_slice(&0u64.to_le_bytes());         // n_kv
32//!
33//! let meta = GgufParser::parse_bytes(&buf).expect("parse ok");
34//! assert_eq!(meta.version, 3);
35//! assert_eq!(meta.n_tensors, 0);
36//! assert_eq!(meta.total_params(), 0);
37//!
38//! let registry = ModelRegistry::new();
39//! assert!(registry.is_empty());
40//! # }
41//! ```
42
43pub mod gguf_parser;
44pub mod registry;
45
46pub use gguf_parser::{
47    GgufMetadata, GgufModelArch, GgufParseError, GgufParser, GgufTensorInfo, GgufValue,
48};
49pub use registry::{ModelHandle, ModelInfo, ModelRegistry, RegistryError};