pub struct MarkovModel { /* private fields */ }Expand description
N-gram Markov model for shell command prediction
Implementations§
Source§impl MarkovModel
impl MarkovModel
Sourcepub fn train_incremental(&mut self, commands: &[String])
pub fn train_incremental(&mut self, commands: &[String])
Incrementally train on new commands (appends to existing model)
Sourcepub fn last_trained_position(&self) -> usize
pub fn last_trained_position(&self) -> usize
Get the last trained position in history
Sourcepub fn total_commands(&self) -> usize
pub fn total_commands(&self) -> usize
Get total commands trained on
Sourcepub fn suggest(&self, prefix: &str, count: usize) -> Vec<(String, f32)>
pub fn suggest(&self, prefix: &str, count: usize) -> Vec<(String, f32)>
Suggest completions for a prefix
Optimized for minimal allocations (Issue #93):
- Pre-allocated vectors with capacity
- HashSet for O(1) duplicate detection
- Reused string buffers where possible
Sourcepub fn save(&self, path: &Path) -> Result<()>
pub fn save(&self, path: &Path) -> Result<()>
Save model to .apr file
Uses ModelType::NgramLm (0x10) for proper classification (QA report fix).
Sourcepub fn load(path: &Path) -> Result<Self>
pub fn load(path: &Path) -> Result<Self>
Load model from .apr file using memory-mapped I/O
Uses mmap for zero-copy loading, reducing syscalls from ~970 to <50 (see bundle-mmap-spec.md Section 8).
Supports both NgramLm (new) and Custom (legacy) model types for backward compatibility.
Sourcepub fn save_encrypted(&self, path: &Path, password: &str) -> Result<()>
pub fn save_encrypted(&self, path: &Path, password: &str) -> Result<()>
Save model with AES-256-GCM encryption (spec §4.1.2)
Uses Argon2id for key derivation from password. The model can only be loaded with the correct password.
Sourcepub fn load_encrypted(path: &Path, password: &str) -> Result<Self>
pub fn load_encrypted(path: &Path, password: &str) -> Result<Self>
Load encrypted model from .apr file (spec §4.1.2)
Requires the same password used during encryption. Returns an error if the password is incorrect.
Sourcepub fn is_encrypted(path: &Path) -> Result<bool>
pub fn is_encrypted(path: &Path) -> Result<bool>
Check if a model file is encrypted
Sourcepub fn save_compressed(&self, path: &Path) -> Result<()>
pub fn save_compressed(&self, path: &Path) -> Result<()>
Save model with zstd compression (Tier 2)
Achieves ~14x size reduction with minimal decompression overhead (~10-20ms). Actually faster in practice due to reduced I/O.
Sourcepub fn save_compressed_encrypted(
&self,
path: &Path,
password: &str,
) -> Result<()>
pub fn save_compressed_encrypted( &self, path: &Path, password: &str, ) -> Result<()>
Save model with both compression and encryption (Tier 2+3)
Best of both worlds: small size and protection.
Sourcepub fn is_compressed(path: &Path) -> Result<bool>
pub fn is_compressed(path: &Path) -> Result<bool>
Check if a model file is compressed
Returns true if payload_size < uncompressed_size (compression was applied)
Sourcepub fn ngram_count(&self) -> usize
pub fn ngram_count(&self) -> usize
Number of unique n-grams
Sourcepub fn vocab_size(&self) -> usize
pub fn vocab_size(&self) -> usize
Vocabulary size
Sourcepub fn ngram_size(&self) -> usize
pub fn ngram_size(&self) -> usize
N-gram size
Sourcepub fn size_bytes(&self) -> usize
pub fn size_bytes(&self) -> usize
Approximate model size in bytes
Sourcepub fn top_commands(&self, count: usize) -> Vec<(String, u32)>
pub fn top_commands(&self, count: usize) -> Vec<(String, u32)>
Top commands by frequency
Optimized to reduce allocations:
- Pre-allocated result vector
- Uses sort_unstable for better cache locality
Sourcepub fn validate(
commands: &[String],
ngram_size: usize,
train_ratio: f32,
) -> ValidationResult
pub fn validate( commands: &[String], ngram_size: usize, train_ratio: f32, ) -> ValidationResult
Validate model using holdout evaluation with aprender’s ranking metrics.
Uses aprender::metrics::ranking for Hit@K and MRR with prefix matching
(appropriate for command completion where partial matches count).
Trait Implementations§
Source§impl<'de> Deserialize<'de> for MarkovModel
impl<'de> Deserialize<'de> for MarkovModel
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl Freeze for MarkovModel
impl RefUnwindSafe for MarkovModel
impl Send for MarkovModel
impl Sync for MarkovModel
impl Unpin for MarkovModel
impl UnwindSafe for MarkovModel
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more