Pith. sign in

REVIEW 4 major objections 5 minor 1 cited by

TaDA: Training-free recipe for Decoding with Adaptive KV Cache Compression and Mean-centering

T0 review · 4 major / 5 minor · reviewed 2026-08-07 · deepseek-v4-flash

Pith's one-line read TaDA compresses the KV cache to 27% of its 16-bit size while keeping accuracy on long-context and chain-of-thought benchmarks, without training or separate outlier handling.

desk verdict The 27% memory claim holds only for the MHA model; the sum-centering trick is real and useful, but the task-dependent precision search keeps this from being a general recipe. read the letter →

arxiv 2506.04642 v1 pith:QFOM5FXB submitted 2025-06-05 cs.CL

classification cs.CL
keywords KVcachecompressionquantizationmean-centeringadaptivebit-widthLLMinferenceoutlierhandlinglong-contextgenerationchain-of-thought
verification ladder T0 review T1 audit T2 compute T3 formal

The pith

A machine-rendered reading of the paper's core claim, the machinery that carries it, and where it could break.

The reading

The paper proposes TaDA, a training-free way to shrink the KV cache of a transformer during decoding. Its central claim is that storing, for each group of attention heads, one shared key/value activation plus quantized deviations from that shared vector cuts memory to 27% of the 16-bit baseline while matching unquantized accuracy on long-context and chain-of-thought benchmarks. The mean-centered form removes the big outliers that force other quantization methods to maintain a separate sparse outlier matrix. A per-layer bit-width search (2, 4, or 8 bits) and a small buffer of uncompressed recent tokens close the remaining accuracy gap. If the claim holds, longer contexts and larger batches become feasible without retraining or architecture changes.

What carries the argument

The load-bearing mechanism is the mean-centered KV representation. For each group of attention heads, TaDA stores one shared key activation $K_m$ and one shared value activation $V_m$, plus per-head deviations $D_K^i = K_m - K^i$ and $D_V^i = V_m - V^i$ quantized to 2, 4, or 8 bits; attention uses reconstructed $\hat{K}^i = K_m - \mathrm{dequant}(D_K^i)$ and similarly for values. A random search over bit-widths per layer, driven by a small same-domain training sample, assigns fewer bits to low-sensitivity layers, and a short uncompressed tail of recent tokens avoids degrading attention to the newest context. Custom fused kernels hide the cost of computing the mean, quantizing deviations, and reconstructing keys and values inside the attention pass.

What would settle it

Hold the searched precision pattern fixed and evaluate TaDA at the 27% memory setting on a long-context benchmark drawn from a different domain than the search set; if the average accuracy drops materially below the values in Table 1 relative to the BF16 baseline, the transferability claim fails.

Watch

Extended reading notes

Core claim

TaDA's discovery is that the outlier problem for KV cache quantization can be redirected rather than managed: instead of quantizing raw key and value activations and then hunting for sparse noncontiguous outliers, TaDA computes a shared activation per head group, subtracts it from each head's activation, and quantizes the smaller-range deviations. Attention then reconstructs each head as shared minus dequantized deviation. The paper argues empirically that this mean-centering step alone gives lower reconstruction error than the 2-bit KIVI baseline across most layers of Llama2-7B, and that adding a random search over per-layer bit precision brings the compressed model to within a fraction of a point of the 16-bit baseline on LongBench tasks and GSM8k reasoning, at 27-35% of the original KV cache memory.

Load-bearing premise

The per-layer bit-width pattern found by randomly searching on 1,000 samples from a training set in the same domain as the task must keep working on the evaluation data without any retuning.

Editorial extensions

If this is right

  • At 27% of the 16-bit KV cache budget on Llama2-7B, the average LongBench score stays within about 0.2 points of the unquantized baseline, while the compared methods at 25-37% budgets lose roughly 0.6 to 4.5 points on the same average.
  • Because no training and no separate outlier structure are needed, TaDA can be inserted into existing autoregressive decoding with kernel-level changes only.
  • On grouped-query-attention models (Llama3-8B-it, Mistral-7B-it), TaDA matches the best quantization baselines at a 35% KV cache budget and matches or outperforms them on GSM8k chain-of-thought evaluations.
  • Measured on a Llama3.1-70B-style single attention layer, TaDA uses 59% (2-bit) to 85% (4-bit) of the peak memory of BF16 and reduces time per token by about 10x and 3x, respectively.
  • The search consistently assigns 4-bit precision to lower layers and 2-bit precision to higher layers, and this pattern is what makes the 27% budget reachable.

Reading between the lines

Editorial extensions of the paper, not claims the author makes directly.

  • The paper's limitation section concedes that the bit-width search needs a sub-sampled training set from the same domain as the task; a data-agnostic search or a universal golden search set is the natural next step and would determine whether TaDA is a true drop-in recipe.
  • Mean-centering and residual tokens are independent levers, so they could be stacked with token-eviction or low-rank compression to push the cache below 27% without changing the search machinery.
  • The reconstruction-error ablation suggests a testable prediction: layers whose activations have the largest outlier spread should be the ones that get 4 or 8 bits in the search; checking that correlation on new models would validate the sensitivity explanation.
  • The kernel latency numbers come from a single-layer benchmark, so end-to-end serving throughput on a full model remains an open measurement that would show whether the memory savings translate into user-visible speedups.
Share X Bluesky LinkedIn Reddit HN

Editorial analysis

A structured set of objections, weighed in public.

Desk editor's note, referee report, and a circularity audit.

Referee Report

4 major / 5 minor

Summary. The paper proposes TaDA, a training-free KV cache compression method for transformer LLMs. TaDA mean-centers key and value activations along the head dimension, stores the centered activation together with quantized deviations, and selects a per-layer quantization precision by random search on a small training subset. It also keeps a small buffer of recent tokens in high precision and uses custom Triton kernels to fuse compression with RoPE, value projection, and flash-decoding. The authors evaluate TaDA on LongBench tasks and GSM8k chain-of-thought reasoning with Llama2-7B, Llama3-8B-it, and two Mistral-7B variants, reporting KV cache memory reduced to 27% of the 16-bit baseline for Llama2-7B and to 35% for the GQA models, with accuracy close to the unquantized baseline.

Significance. If the claims hold, TaDA is practically useful: it avoids separate sparse or low-rank outlier structures, offers a simple mean-centering plus quantized-deviation scheme, and provides kernel-level evidence of latency and memory benefits. The paper includes comparisons with KIVI, GEAR, and Quanto, an ablation of reconstruction error, and a candid discussion of the search-based precision selection. The main value is the combination of adaptive per-layer precision, mean-centering, and fused inference kernels. However, the load-bearing claims depend on a correctly specified mean-centering operation, on the transferability of the searched precision pattern, and on statistical support for 'comparable accuracy'; these points need attention before the results can be accepted at face value.

major comments (4)
  1. [Section 3.1, Eqs. (1)-(2)] The definition K_m = sum_{i=1:H} K^i (and likewise for V) is a sum, not a mean, despite the text and Figure 1 describing the method as 'mean-centering'. With this literal definition, D_K^i = K_m - K^i is the sum of the other H-1 heads, not a centered deviation; its magnitude grows with H, so the stated motivation that mean-centering reduces the impact of outliers does not follow. If the intended operation is the arithmetic mean, the normalization factor 1/H is missing. The reconstruction in Eqs. (7)-(8) is algebraically consistent with the sum definition, so the reported numbers may still be reproducible, but the paper must correct the definition or show that the unnormalized sum behaves equivalently; as written, the central mechanism is mis-specified.
  2. [Abstract and Table 1] The headline claim that TaDA 'reduces KV cache memory footprint to 27% of the original 16-bit baseline' is true only for Llama2-7B; for Llama3-8b-it, Mistral-7b-it, and Mistral-7b, the reported budget is 0.35 in Table 1 and Table 2. The unqualified statement overstates the result. Relatedly, the accuracy differences to the BF16 baseline are small (e.g., 45.87 vs. 46.03 on the LongBench average for Llama2-7B), but the paper reports no error bars, no control for decoding randomness, and no repeated runs, so the 'comparable accuracy' claim is not statistically supported. Please qualify the memory claim and add variance or seed analysis.
  3. [Section 3.3 and Limitations] The per-layer precision pattern is found by random search on 1000 training samples from HotpotQA (for LongBench) or from GSM8k (for GSM8k), and the Limitations paragraph concedes that the search uses a training set from the same domain as the task. Because this precision pattern is the mechanism that achieves the 27-35% memory budget, the paper needs evidence that the pattern transfers to held-out domains or that the search is stable across seeds and calibration sets. A cross-domain evaluation (search on one domain, evaluate on several unrelated benchmarks) would directly address this concern; without it, the reported trade-off may be specific to the calibration domain.
  4. [Section 4.4, Figure 2] The claim that TaDA 'eliminates the need for separate outlier handling' is supported only by reconstruction-error curves in Figure 2, not by an accuracy comparison under conditions where outliers are known to matter, nor by an ablation that adds or removes an outlier-handling component. The Frobenius norm of activation differences is an intermediate quantity; lower reconstruction error does not by itself establish that no outlier structure is needed for downstream accuracy. Please add an outlier-focused accuracy experiment or temper the claim to say that TaDA does not use an explicit outlier structure.
minor comments (5)
  1. [Table 1] The caption says the evaluation covers eight LongBench tasks, but only four tasks are shown and the full table is not provided in the appendix; please include the complete results for reproducibility.
  2. [Section 3.3, Eqs. (9)-(10)] The concatenation order in the residual-token equations appears inconsistent with the text: the text describes recent tokens as uncompressed, but the equations write cat(K^i[r:], \hat K^i[:r]), which suggests the first r tokens are uncompressed. Please clarify the indexing.
  3. [Section 3.3] The sentence 'we observed that for compressing KV cache budget to ∼27% or less suffers from accuracy loss' is grammatically unclear and should state the exact threshold and the experiments supporting it.
  4. [References] The KIVI reference (Liu et al., 2024) lacks a venue or arXiv identifier, and several other references have inconsistent formatting; please unify the bibliography.
  5. [Appendix A, Table 3] The performance table reports 'Memory (GB)' for a single self-attention layer, but it is not stated which components are included; please clarify whether this is peak memory for the whole layer or only the KV cache, since the ratio 4.6/7.8 differs from the KV-cache budget ratios in the main tables.

Circularity Check

0 steps flagged · score 0.0 of 10

No circularity: TaDA's per-layer precision selection and mean-centering recipe are evaluated on held-out data, and the only self-citation is background, not load-bearing.

full rationale

This is an empirical systems/quantization paper with no derivation whose conclusion is assumed in its premises. The mean-centering and deviation reconstruction equations (Eqs. 1-4, 7-8) are explicit mathematical transformations; the reported 27% memory figure follows from the chosen per-layer bit-widths and the storage-accounting formula, not from a fitted output. The per-layer quantization precision is selected by random search on a calibration subset (hotpotqa training for LongBench, GSM8k training for GSM8k) and then evaluated on disjoint benchmark tasks, which is standard model selection rather than circularity. The only self-citation (Joshi et al., 2024) supports a background claim that GQA-style compression can require retraining; it does not carry the central result. The Limitations section's concession that the search is task-dependent is an honest generalization limitation, not evidence that the evaluation is circular. No step in the claimed derivation reduces to its own input, and no fitted parameter is renamed as a prediction.

Assumptions & free parameters 3 free parameters · 3 assumptions · 0 invented entities

The method does not introduce new physical entities. The free parameters are the per-layer bit allocations, the residual buffer length, and the search sample size. The key axiomatic assumptions are that mean-centering helps quantization and that the search result transfers across tasks.

free parameters (3)
  • Per-layer quantization precision vector = Not fully specified; Table 4 shows one example for Llama2-7B: 29 layers at 4-bit, 3 layers at 2-bit
    Selected via random search on 1000 training samples (Section 3.3). The method's accuracy depends on this choice, and it is tuned to each task/model.
  • Residual token buffer size R = R=128 for LongBench, R=32 for GSM8k
    Chosen by hand per benchmark (Section 4.1). It determines how many recent tokens stay uncompressed.
  • Search sample size = 1000 samples
    Chosen for the search; not justified. This affects the quality of the precision search.
assumptions (3)
  • domain assumption Mean-centering along the head dimension reduces the dynamic range of key and value activations, making deviations quantizable at low bit widths.
    Section 3.1 and Figure 2 argue this empirically, but it is not proven. If the deviations are not actually easier to quantize, the claimed memory/accuracy tradeoff fails.
  • domain assumption The layer-wise precision pattern found on a small training set generalizes to the evaluation benchmarks.
    Section 3.3 uses this to justify the search; the Limitations section admits task-dependence, so this is a recognized weakness.
  • domain assumption The reconstruction \hat K_i = K_m - quantize(D_i) requires K_m to be the mean of the heads.
    Equation (1) defines K_m as a sum over heads, but the reconstruction (Eq 7-8) only works if K_m is the mean. This inconsistency is not discussed and is load-bearing for the method.

how reviews work

0 comments
Cite this review

Pith. "Pith review of TaDA: Training-free recipe for Decoding with Adaptive KV Cache Compression and Mean-centering." pith.science (2026). https://pith.science/paper/QFOM5FXB

@misc{pith2026250604642,
  author       = {Pith},
  title        = {Pith review of: TaDA: Training-free recipe for Decoding with Adaptive KV Cache Compression and Mean-centering},
  year         = {2026},
  howpublished = {\url{https://pith.science/paper/QFOM5FXB}},
  note         = {Machine review of arXiv:2506.04642}
}
read the original abstract

The key-value (KV) cache in transformer models is a critical component for efficient decoding or inference, yet its memory demands scale poorly with sequence length, posing a major challenge for scalable deployment of large language models. Among several approaches to KV cache compression, quantization of key and value activations has been widely explored. Most KV cache quantization methods still need to manage sparse and noncontiguous outliers separately. To address this, we introduce TaDA, a training-free recipe for KV cache compression with quantization precision that adapts to error sensitivity across layers and a mean centering to eliminate separate outlier handling. Our approach yields substantial accuracy improvements for multiple models supporting various context lengths. Moreover, our approach does not need to separately manage outlier elements -- a persistent hurdle in most traditional quantization methods. Experiments on standard benchmarks demonstrate that our technique reduces KV cache memory footprint to 27% of the original 16-bit baseline while achieving comparable accuracy. Our method paves the way for scalable and high-performance reasoning in language models by potentially enabling inference for longer context length models, reasoning models, and longer chain of thoughts.

Figures

Figures reproduced from arXiv: 2506.04642 by the authors.

Figure 1
Figure 1. Illustration of TaDA’s self-attention mechanism in comparison with vanilla self-attention ( [PITH_FULL_IMAGE:figures/full_fig_p003_1.png] view at source ↗
Figure 2
Figure 2. Analysis of key and value activation compression error using Llama2-7B model on hotpotqa dataset’s [PITH_FULL_IMAGE:figures/full_fig_p006_2.png] view at source ↗

Discussion (0). Sign in to comment.

Forward citations

Cited by 1 Pith paper

Reviewed papers in the Pith corpus that reference this work. Sorted by Pith novelty score. Full citation record

  1. S$^4$R: Selective Sampling, Subspaces, and Sparse Reconstruction for Compressed Long-Context KV Caching

    cs.CL 2026-08 conditional novelty 5.0 of 10

    S4R compresses the KV cache up to 5x by learning low-rank subspaces from sampled prompt tokens and reconstructing only a small set of relevant keys and values during decoding.

Reference graph

Works this paper leans on

29 extracted references · 5 canonical work pages · cited by 1 Pith paper

  1. [1]

    Joshua Ainslie, James Lee-Thorp, Michiel de Jong, Yury Zemlyanskiy, Federico Lebrón, and Sumit Sanghai. 2023. https://arxiv.org/abs/2305.13245 Gqa: Training generalized multi-query transformer models from multi-head checkpoints . Preprint, arXiv:2305.13245

  2. [2]

    Yushi Bai, Xin Lv, Jiajie Zhang, Hongchang Lyu, Jiankai Tang, Zhidian Huang, Zhengxiao Du, Xiao Liu, Aohan Zeng, Lei Hou, Yuxiao Dong, Jie Tang, and Juanzi Li. 2024. https://doi.org/10.18653/v1/2024.acl-long.172 L ong B ench: A bilingual, multitask benchmark for long context understanding . In Proceedings of the 62nd Annual Meeting of the Association for ...

  3. [3]

    Chi-Chih Chang, Chengyu Huang, Zixuan Zeng, Chen Liang, Yuxuan Song, Ziyuan Zhang, Yifan Mai, Hanze Dong, Yifan Xu, and Jianyu Huang. 2024. https://arxiv.org/abs/2407.21118 Palu: Compressing kv-cache with low-rank projection . Preprint, arXiv:2407.21118

  4. [4]

    Karl Cobbe, Vineet Kosaraju, Mohammad Bavarian, Mark Chen, Heewoo Jun, Lukasz Kaiser, Matthias Plappert, Jerry Tworek, Jacob Hilton, Reiichiro Nakano, Christopher Hesse, and John Schulman. 2021. https://arxiv.org/abs/2110.14168 Training verifiers to solve math word problems . Preprint, arXiv:2110.14168

  5. [5]

    Tri Dao. 2023. https://arxiv.org/abs/2307.08691 Flashattention-2: Faster attention with better parallelism and work partitioning . Preprint, arXiv:2307.08691

  6. [6]

    DeepSeek-AI and et al. 2024. https://arxiv.org/abs/2405.04434 Deepseek-v2: A strong, economical, and efficient mixture-of-experts language model . Preprint, arXiv:2405.04434

  7. [7]

    Shichen Dong, Wen Cheng, Jiayu Qin, and Wei Wang. 2024. https://arxiv.org/abs/2403.04643 Qaq: Quality adaptive quantization for llm kv cache . Preprint, arXiv:2403.04643

  8. [8]

    Aaron Grattafiori, Abhimanyu Dubey, Abhinav Jauhri, Abhinav Pandey, Abhishek Kadian, Ahmad Al-Dahle, Aiesha Letman, Akhil Mathur, Alan Schelten, Alex Vaughan, Amy Yang, and Angela Fan et. al. 2024. https://arxiv.org/abs/2407.21783 The llama 3 herd of models . Preprint, arXiv:2407.21783

Show all 29 references
  1. [9]

    Ke Hong, Guohao Dai, Jiaming Xu, Qiuli Mao, Xiuhong Li, Jun Liu, Kangdi Chen, Yuhan Dong, and Yu Wang. 2024. https://arxiv.org/abs/2311.01282 Flashdecoding++: Faster large language model inference on gpus . Preprint, arXiv:2311.01282

  2. [10]

    Coleman Hooper, Sanghyun Kim, Yifan Mai, Hanze Dong, Yifan Xu, Yida Wang, and Jianyu Huang. 2024. https://arxiv.org/abs/2401.18079 Kvquant: Towards 10 million context length llm inference with kv cache quantization . Preprint, arXiv:2401.18079

  3. [11]

    Albert Q. Jiang, Alexandre Sablayrolles, Arthur Mensch, Chris Bamford, Devendra Singh Chaplot, Diego de las Casas, Florian Bressand, Gianna Lengyel, Guillaume Lample, Lucile Saulnier, Lélio Renard Lavaud, Marie-Anne Lachaux, Pierre Stock, Teven Le Scao, Thibaut Lavril, Thomas ...

  4. [12]

    Vinay Joshi, Prashant Laddha, Shambhavi Sinha, Om Ji Omer, and Sreenivas Subramoney. 2024. https://arxiv.org/abs/2406.10247 Qcqa: Quality and capacity-aware grouped query attention . Preprint, arXiv:2406.10247

  5. [13]

    Hao Kang, Qingru Zhang, Souvik Kundu, Geonhwa Jeong, Zaoxing Liu, Tushar Krishna, and Tuo Zhao. 2024. https://arxiv.org/abs/2403.05527 Gear: An efficient kv cache compression recipe for near-lossless generative inference of llm . Preprint, arXiv:2403.05527

  6. [14]

    Zichang Liu, Yifan Xu, Yida Wang, Jianyu Huang, Yifan Mai, Hanze Dong, Yuxan Song, Chao Jian, Jian Tang, and Jianmin Wang. 2023. Scissorhands: Exploiting the persistence of importance hypothesis for llm kv cache compression at test time. In S. Koyejo, S. Mohri, A. Agarwal, D. ...

  7. [15]

    Zirui Liu, Jiayi Yuan, Hongye Jin, Shaochem Zhong, Zhaozhuo Xu, Vladimir Braverman, Beidi Chen, and Xia Hu. 2024. https://proceedings.mlr.press/v235/liu24bz.html Kivi: A tuning-free asymmetric 2bit quantization for kv cache

  8. [16]

    ModelTC. 2024. https://github.com/ModelTC/lightllm Lightllm: A python-based llm inference and serving framework . Accessed: 2025-03-22

  9. [17]

    Noam Shazeer. 2019. https://arxiv.org/abs/1911.02150 Fast transformer decoding: One write-head is all you need . Preprint, arXiv:1911.02150

  10. [18]

    Fu, Zhiqiang Xie, Beidi Chen, Clark Barrett, Joseph E

    Ying Sheng, Lianmin Zheng, Binhang Yuan, Zhuohan Li, Max Ryabinin, Daniel Y. Fu, Zhiqiang Xie, Beidi Chen, Clark Barrett, Joseph E. Gonzalez, Percy Liang, Christopher Ré, Ion Stoica, and Ce Zhang. 2023. https://arxiv.org/abs/2303.06865 Flexgen: High-throughput generative infer...

  11. [19]

    Jianlin Su, Yu Lu, Shengfeng Pan, Bo Wen, and Yunfeng Liu. 2021. https://arxiv.org/abs/2104.09864 Roformer: Enhanced transformer with rotary position embedding . arXiv preprint arXiv:2104.09864

  12. [20]

    Philippe Tillet, H. T. Kung, and David Cox. 2019. https://doi.org/10.1145/3315508.3329973 Triton: an intermediate language and compiler for tiled neural network computations . In Proceedings of the 3rd ACM SIGPLAN International Workshop on Machine Learning and Programming Lang...

  13. [21]

    Hugo Touvron, Louis Martin, Kevin Stone, Peter Albert, Amjad Almahairi, Yasmine Babaei, Nikolay Bashlykov, Soumya Batra, Prajjwal Bhargava, Shruti Bhosale, and Dan Bikel et. al. 2023. https://arxiv.org/abs/2307.09288 Llama 2: Open foundation and fine-tuned chat models . Prepri...

  14. [22]

    Raushan Turganbay. 2024. https://huggingface.co/blog/kv-cache-quantization Unlocking longer generation with key-value cache quantization . Accessed: 2025-03-21

  15. [23]

    Gomez, Lukasz Kaiser, and Illia Polosukhin

    Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Lukasz Kaiser, and Illia Polosukhin. 2023. https://arxiv.org/abs/1706.03762 Attention is all you need . Preprint, arXiv:1706.03762

  16. [24]

    Cohen, Ruslan Salakhutdinov, and Christopher D

    Zhilin Yang, Peng Qi, Saizheng Zhang, Yoshua Bengio, William W. Cohen, Ruslan Salakhutdinov, and Christopher D. Manning. 2018. HotpotQA : A dataset for diverse, explainable multi-hop question answering. In Conference on Empirical Methods in Natural Language Processing ( EMNLP )

  17. [25]

    Hao Yu, Zelan Yang, Shen Li, Yong Li, and Jianxin Wu. 2024. https://arxiv.org/abs/2406.07056 Effectively compress kv heads for llm . Preprint, arXiv:2406.07056

  18. [26]

    Minjia Zhang and Yuxiong He. 2020. https://arxiv.org/abs/2010.13369 Accelerating training of transformer-based language models with progressive layer dropping . Preprint, arXiv:2010.13369

  19. [27]

    Zhenyu Zhang, Ying Sheng, Tianyi Zhou, Tianlong Chen, Lianmin Zheng, Ruisi Cai, Zhao Song, Yuandong Tian, Christopher Ré, Clark Barrett, Zhangyang Wang, and Beidi Chen. 2023. H2o: Heavy-hitter oracle for efficient generative inference of large language models. In S. Koyejo, S....

  20. [28]

    online" 'onlinestring :=

    ENTRY address archivePrefix author booktitle chapter edition editor eid eprint eprinttype howpublished institution journal key month note number organization pages publisher school series title type volume year doi pubmed url lastchecked label extra.label sort.label short.list...

  21. [29]

    write newline

    " write newline "" before.all 'output.state := FUNCTION n.dashify 't := "" t empty not t #1 #1 substring "-" = t #1 #2 substring "--" = not "--" * t #2 global.max substring 't := t #1 #1 substring "-" = "-" * t #2 global.max substring 't := while if t #1 #1 substring * t #2 gl...

Pith tools

Reviewed August 7, 2026 · model on record in the stance chip above.