pub struct MarkovModel { /* private fields */ }Expand description
N-gram Markov model for shell command prediction
Implementations§
§impl MarkovModel
impl MarkovModel
pub fn train_incremental(&mut self, commands: &[String])
pub fn train_incremental(&mut self, commands: &[String])
Incrementally train on new commands (appends to existing model)
pub fn last_trained_position(&self) -> usize
pub fn last_trained_position(&self) -> usize
Get the last trained position in history
pub fn total_commands(&self) -> usize
pub fn total_commands(&self) -> usize
Get total commands trained on
pub 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
pub 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).
pub 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.
pub 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.
pub 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.
pub fn is_encrypted(path: &Path) -> Result<bool>
pub fn is_encrypted(path: &Path) -> Result<bool>
Check if a model file is encrypted
pub 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.
pub 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.
pub 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)
§impl MarkovModel
impl MarkovModel
pub fn ngram_count(&self) -> usize
pub fn ngram_count(&self) -> usize
Number of unique n-grams
pub fn vocab_size(&self) -> usize
pub fn vocab_size(&self) -> usize
Vocabulary size
pub fn ngram_size(&self) -> usize
pub fn ngram_size(&self) -> usize
N-gram size
pub fn size_bytes(&self) -> usize
pub fn size_bytes(&self) -> usize
Approximate model size in bytes
pub 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
pub 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 UnsafeUnpin 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