metrale_model_engine/model/trait_impl/
impl_verify.rs

1// SPDX-License-Identifier: MIT OR Apache-2.0
2
3//! 2026-09-26: `impl ModelVerify for TransformerModel`, mostly delegating to `<method>_dispatch`
4//! helpers in the sibling modules.
5//!
6//! Owner: model-engine.
7//! Invariants: the ones in `trait_impl/mod.rs`.
8
9use anyhow::Result;
10
11use crate::model::types::TransformerModel;
12use crate::traits::{ModelVerify, SequenceState};
13
14impl ModelVerify for TransformerModel {
15    fn decode_verify(
16        &self,
17        tokens: &[u32],
18        seq: &mut SequenceState,
19        stream: u64,
20    ) -> Result<Vec<u32>> {
21        self.gdn_carry_flush_pending()?;
22        self.ssm_pool.require_verify_rollback_supported()?;
23        let r = self.decode_verify_dispatch(tokens, seq, stream);
24        self.release_verify_capture_on_err(r)
25    }
26
27    fn decode_verify_graphed(
28        &self,
29        tokens: &[u32; 2],
30        seq: &mut SequenceState,
31        _stream: u64,
32    ) -> Result<[u32; 2]> {
33        self.gdn_carry_flush_pending()?;
34        self.ssm_pool.require_verify_rollback_supported()?;
35        let r = self.decode_verify_graphed_dispatch(tokens, seq, _stream);
36        self.release_verify_capture_on_err(r)
37    }
38
39    fn decode_verify_graphed_k3(
40        &self,
41        tokens: &[u32; 3],
42        seq: &mut SequenceState,
43        _stream: u64,
44    ) -> Result<[u32; 3]> {
45        self.gdn_carry_flush_pending()?;
46        self.ssm_pool.require_verify_rollback_supported()?;
47        let r = self.decode_verify_graphed_k3_dispatch(tokens, seq, _stream);
48        self.release_verify_capture_on_err(r)
49    }
50
51    fn decode_verify_graphed_k4(
52        &self,
53        tokens: &[u32; 4],
54        seq: &mut SequenceState,
55        _stream: u64,
56    ) -> Result<[u32; 4]> {
57        self.gdn_carry_flush_pending()?;
58        self.ssm_pool.require_verify_rollback_supported()?;
59        let r = self.decode_verify_graphed_k4_dispatch(tokens, seq, _stream);
60        self.release_verify_capture_on_err(r)
61    }
62
63    fn can_batch_verify(&self, ks: &[usize]) -> bool {
64        self.can_batch_verify_dispatch(ks)
65    }
66
67    fn decode_verify_batched(
68        &self,
69        tokens: &[u32],
70        ks: &[usize],
71        seqs: &mut [&mut SequenceState],
72        _stream: u64,
73        opts: crate::traits::VerifyBatchedOpts,
74    ) -> Result<Vec<u32>> {
75        self.ssm_pool.require_verify_rollback_supported()?;
76        let r = self.decode_verify_batched_dispatch(tokens, ks, seqs, _stream, opts);
77        self.release_verify_capture_on_err(r)
78    }
79
80    fn decode_verify_graphed_kgamma(
81        &self,
82        tokens: &[u32],
83        seq: &mut SequenceState,
84        _stream: u64,
85    ) -> Result<Vec<u32>> {
86        self.gdn_carry_flush_pending()?;
87        self.ssm_pool.require_verify_rollback_supported()?;
88        let r = self.decode_verify_graphed_kgamma_dispatch(tokens, seq, _stream);
89        self.release_verify_capture_on_err(r)
90    }
91
92    fn decode_and_verify_fused(
93        &self,
94        tokens: &[u32],
95        seq: &mut SequenceState,
96        _stream: u64,
97    ) -> Result<Vec<u32>> {
98        self.gdn_carry_flush_pending()?;
99        self.ssm_pool.require_verify_rollback_supported()?;
100        let r = self.decode_and_verify_fused_dispatch(tokens, seq, _stream);
101        self.release_verify_capture_on_err(r)
102    }
103
104    fn gdn_fold_accepted(
105        &self,
106        slots: &[usize],
107        accepted_rows: &[u32],
108        k_rows: usize,
109    ) -> Result<bool> {
110        self.gdn_fold_accepted_dispatch(slots, accepted_rows, k_rows)
111    }
112}