What changed
6 new builds in 22 hours (b9957 through b9966, picking up from b9956 covered in the July 10 digest). Three changes stand out against the incremental background: DeepSeek-OCR v1 multi-tile support with dynamic resolution (b9963); Hexagon ARGSORT performance improvement via bitonic sort in HVX registers for up to 1024 elements (b9965); and tensor-split regex patterns made static to eliminate per-call recompilation in -sm tensor multi-GPU decode mode (b9966). Additionally, b9957 removes apply_diff from the server tools layer and introduces a tools_io abstraction.
| Build | UTC | Key change |
|-------|-----|------------|
| b9966 | Jul 11, 18:54 | Tensor-split regex patterns made static — prevents regex recompilation on each decode call in -sm tensor mode |
| b9965 | Jul 11, 18:11 | Hexagon: ARGSORT via bitonic sort in HVX registers for tensors up to 1024 elements |
| b9964 | Jul 11, 10:52 | Prevented duplicate spec model downloads via improved argument handling |
| b9963 | Jul 11, 08:38 | DeepSeek-OCR v1 multi-tile support — dynamic resolution, unified image preprocessors for both v1 and v2 |
| b9960 | Jul 11, 08:01 | Removed loading.html from server; UI cleanup |
| b9959 | Jul 11, 06:45 | Sync with ggml repository updates |
| b9957 | Jul 10, 20:17 | Server: removed apply_diff, added tools_io abstraction layer |
TL;DR
6 builds in 22h; b9963 is the headline — DeepSeek-OCR v1 now runs multi-tile with dynamic resolution in llama.cpp, enabling document-layout-aware OCR on locally hosted GGUF models.
Developer signal
Three changes to action: (1) DeepSeek-OCR v1 multi-tile (b9963): DeepSeek-OCR previously ran in llama.cpp in single-tile mode. The b9963 build adds multi-tile support with dynamic resolution — meaning the model now pre-processes input images into variable-size tiles (matching the original training approach) and passes them through a unified preprocessor that handles both DeepSeek-OCR v1 and v2 architectures. In practice: multi-column documents, dense tables, and multi-page scans now produce significantly better extraction accuracy. If you're running local OCR pipelines with DeepSeek-OCR GGUF models, upgrade to b9963 or later. GGUF weights compatible with PR #17400 are required. (2) Hexagon ARGSORT HVX (b9965): For Qualcomm Hexagon DSP deployments, ARGSORT on small tensors (≤1024 elements) now uses an HVX-register bitonic sort instead of a general sort — meaningful throughput improvement for sampling operations on embedded/mobile Snapdragon targets. (3) Tensor-split static regex (b9966): In multi-GPU setups using -sm tensor (tensor-split scheduling mode), the regex for tensor routing was being recompiled on every decode call. Making it static eliminates that overhead — relevant for anyone running multi-GPU inference with tensor parallelism. (4) apply_diff removed (b9957): If you call the llama.cpp server's apply_diff tool endpoint directly in any automation or pipeline, this endpoint is gone as of b9957. Replace with the tools_io abstraction.