pub struct Transformer {
pub config: TransformerConfig,
pub embed_tokens: Embedding,
pub layers: Vec<TransformerBlock>,
pub norm: RMSNorm,
pub lm_head: Option<Tensor>,
}Expand description
Complete transformer model
Fields§
§config: TransformerConfigConfiguration
embed_tokens: EmbeddingToken embedding layer
layers: Vec<TransformerBlock>Transformer layers
norm: RMSNormFinal layer normalization
lm_head: Option<Tensor>Language model head (tied to embeddings or separate)
Implementations§
Source§impl Transformer
impl Transformer
Sourcepub fn new(config: &TransformerConfig) -> Self
pub fn new(config: &TransformerConfig) -> Self
Create new transformer with initialized weights
Sourcepub fn from_params(
config: &TransformerConfig,
params: &HashMap<String, Tensor>,
) -> Option<Self>
pub fn from_params( config: &TransformerConfig, params: &HashMap<String, Tensor>, ) -> Option<Self>
Create transformer from parameter map
Expected parameter names (following HuggingFace LLaMA convention):
model.embed_tokens.weightmodel.layers.{i}.*model.norm.weightlm_head.weight(optional, uses tied embeddings if not present)
Sourcepub fn from_safetensors(
model_path: impl AsRef<Path>,
config: &TransformerConfig,
) -> Result<Self>
pub fn from_safetensors( model_path: impl AsRef<Path>, config: &TransformerConfig, ) -> Result<Self>
Load transformer from SafeTensors file(s)
Reads SafeTensors weights from model_path, converts BF16/F16 to F32,
validates shapes against config, checks for NaN/Inf, and constructs
the complete Transformer.
§Arguments
model_path- Path to model directory or single SafeTensors fileconfig- Transformer configuration specifying model dimensions
§Errors
Returns Error::ConfigError if:
- No SafeTensors files found
- Required weight tensors are missing
- Weight shapes do not match config dimensions
- Weights contain NaN or Inf values
- Layer count does not match config
Sourcepub fn from_apr(
apr_path: impl AsRef<Path>,
config: &TransformerConfig,
) -> Result<Self>
pub fn from_apr( apr_path: impl AsRef<Path>, config: &TransformerConfig, ) -> Result<Self>
Load transformer from APR file (.apr format)
Reads tensor data from an APR binary file, dequantizing from any stored
dtype (F16, Q4K, etc.) to F32. Uses the same validation pipeline as
from_safetensors: structural, shape, and NaN/Inf checks.
§Arguments
apr_path- Path to the .apr model fileconfig- Transformer configuration (typically read from APR metadata)
§Errors
Returns Error::ConfigError if tensors are missing, shapes mismatch, or
weights contain NaN/Inf values.
Forward pass returning hidden states with LoRA adjusts (KAIZEN-011)
Like forward_hidden but applies LoRA adapters to Q/V projections in
each transformer layer’s attention. Enables non-CUDA LoRA training by
putting LoRA parameters into the autograd graph.
§Arguments
token_ids- Input token IDslora_layers- LoRA layers in [Q_0, V_0, Q_1, V_1, …] order
§Returns
Hidden states tensor (seq_len * hidden_size, flattened)
Sourcepub fn forward_with_lora(
&self,
token_ids: &[u32],
lora_layers: &[LoRALayer],
) -> Tensor
pub fn forward_with_lora( &self, token_ids: &[u32], lora_layers: &[LoRALayer], ) -> Tensor
Forward pass with LoRA adapters (ENT-LoRA-001)
Like forward but applies LoRA adapters to Q/V projections.
Returns full logits (seq_len * vocab_size).
§Arguments
token_ids- Input token IDslora_layers- LoRA layers in [Q_0, V_0, Q_1, V_1, …] order
Sourcepub fn forward_last(&self, token_ids: &[u32]) -> Tensor
pub fn forward_last(&self, token_ids: &[u32]) -> Tensor
Get the last token’s logits (for generation)
Sourcepub fn parameters(&self) -> Vec<&Tensor>
pub fn parameters(&self) -> Vec<&Tensor>
Get all parameters as a vector
Sourcepub fn parameters_mut(&mut self) -> Vec<&mut Tensor>
pub fn parameters_mut(&mut self) -> Vec<&mut Tensor>
Get all parameters as mutable references for optimizer
Sourcepub fn config(&self) -> &TransformerConfig
pub fn config(&self) -> &TransformerConfig
Get configuration
Sourcepub fn embed_token(&self, token_id: u32) -> Vec<f32>
pub fn embed_token(&self, token_id: u32) -> Vec<f32>
Embed a single token, returning hidden_size floats.
Sourcepub fn output_norm_weight_slice(&self) -> &[f32]
pub fn output_norm_weight_slice(&self) -> &[f32]
Get the output norm weight as a slice.
Sourcepub fn lm_head_weight_slice(&self) -> &[f32]
pub fn lm_head_weight_slice(&self) -> &[f32]
Get the lm_head weight as a slice (vocab_size × hidden_size, row-major).
Sourcepub fn lm_head_weight(&self) -> &Tensor
pub fn lm_head_weight(&self) -> &Tensor
Get the language model head weight tensor.
Returns the dedicated lm_head weight if present, otherwise falls back
to tied embedding weights.
Sourcepub fn named_parameters(&self) -> Vec<(String, &Tensor)>
pub fn named_parameters(&self) -> Vec<(String, &Tensor)>
Get named parameters for checkpoint serialization.
Returns (name, tensor) pairs matching HuggingFace weight conventions. This handles variable parameter counts (e.g., models with/without attention biases) correctly, unlike the hardcoded 9-params-per-layer assumption.
Sourcepub fn set_named_parameter(&mut self, name: &str, value: Tensor) -> bool
pub fn set_named_parameter(&mut self, name: &str, value: Tensor) -> bool
ENT-282: Set a named parameter by name (for delta checkpoint overlay).
Returns true if the parameter was found and set.
Auto Trait Implementations§
impl !RefUnwindSafe for Transformer
impl !Send for Transformer
impl !Sync for Transformer
impl !UnwindSafe for Transformer
impl Freeze for Transformer
impl Unpin for Transformer
impl UnsafeUnpin for Transformer
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> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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 moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.