Skip to content

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 02 Sep 17:26
· 20 commits to main since this release

What's Changed

  • feat(spm): CPU-only iOS/macOS SwiftPM package (0.2.3) by @iamstuffed in #224
  • fix(spm): release survivor-check false-positived on doc comment by @iamstuffed in #225
  • feat(metal): Metal GPU backend on iOS (Phase 2) by @iamstuffed in #226
  • chore: bump to 0.2.4 (Metal-enabled iOS SwiftPM) by @iamstuffed in #227
  • feat(ios): CeraChat example app (Phase 4 — final iOS phase) by @iamstuffed in #228
  • feat(lora): apply LoRA to LFM2 shortconv projections across all backends by @iamstuffed in #229
  • feat(metal): native Q4_K GEMV kernel + Q6_K layer weights (enable Q4_K_M on Metal) by @iamstuffed in #230
  • chore(docs): fix rustdoc intra-doc links + add CI doc-lint gate by @iamstuffed in #231
  • ci: drop broken Microsoft apt sources before apt-get update by @iamstuffed in #233
  • ci: match Microsoft apt sources by content, not hardcoded filenames by @iamstuffed in #234
  • chore: bump to 0.2.5 by @iamstuffed in #232
  • feat(cera): benchmark-client primitives (CPU descriptor, provenance, memory pre-flight) by @iamstuffed in #235
  • perf(metal): larger prefill query-block (QPT=32) for hd=64 attention by @iamstuffed in #237
  • feat(cera)!: fallible KV allocation — OutOfMemory instead of abort by @iamstuffed in #236
  • chore: bump to 0.2.6 and reconcile crate READMEs with current API by @iamstuffed in #238
  • feat: tool calling (function calling) across core, CLI, FFI, WASM by @iamstuffed in #239
  • chore: bump to 0.2.7 + document tool calling across READMEs by @iamstuffed in #240
  • fix(cera-ffi): real record defaults so GenerateOpts()/SessionConfig() construct by @iamstuffed in #241
  • perf(cera): persistent affinity-pinned threadpool; decode on all P-cores by @iamstuffed in #243
  • feat(cera): benchmark-parity API for external harnesses by @iamstuffed in #242
  • chore: release 0.3.0 (breaking: GenerateOpts/ModelMetadata public-field additions) by @iamstuffed in #244
  • chore: bump to latest nightly (drop stabilized dotprod gate) + README cleanup by @iamstuffed in #245
  • feat(cera): Q5_K quantization support by @iamstuffed in #246
  • perf(cera): wire gemv_q6_k into wgpu GEMV dispatch (Q6K stays quantized) by @iamstuffed in #247
  • feat(cera): native wgpu Q5_K GEMV kernel by @iamstuffed in #248
  • perf(cera): native Q4_K wgpu GEMV + GEMM (Q4KM stays quantized) by @iamstuffed in #249
  • fix(cera): gemv_q6_k robustness — odd-m OOB guard + get_wid for large m by @iamstuffed in #250
  • perf(cera): store the wgpu LM head as f16 (B3) + complete get_wid sweep by @iamstuffed in #251
  • feat(cera): native wgpu flash-attention decode kernel by @iamstuffed in #252
  • refactor(cera): delete classic wgpu decode-attention kernel (superseded by flash) by @iamstuffed in #253
  • feat(cera): NEON int8-dotprod GEMV for Q4_K on CPU by @iamstuffed in #254
  • feat(cera): GPU I/O counters + Android bench/profile harness + baseline (T0) by @iamstuffed in #255
  • fix(metal): bind freq_factors + the full params struct in the audio decoder by @iamstuffed in #256
  • perf(gpu): register-tiled K-quant GEMM — 2.9x prefill on Q4_K_M by @iamstuffed in #257
  • perf(gpu): register-tiled Q8_0 GEMM; drop the dead wgpu gemm_* kernels by @iamstuffed in #258
  • docs(gpu): measure decode — T6 closed WONTFIX, T5b attributes the GPU time by @iamstuffed in #259
  • perf(cpu): batched Q4_K + Q6_K int8 GEMM for prefill (~2.5x) by @iamstuffed in #260
  • perf(wgpu): vectorize Q4_K/Q5_K GEMV weight loads (T11) by @iamstuffed in #261
  • perf(metal): batched Q6_K GEMM for prefill (~2.3x on Q4_K_M) by @iamstuffed in #262
  • perf(metal): Q4_K GEMM isolation microbench + ceiling analysis by @iamstuffed in #263
  • perf(cera): disable zero-init of workgroup memory in compute pipelines by @iamstuffed in #264
  • refactor(metal): centralize kernel param mirrors + guard shader/Rust parity by @iamstuffed in #265
  • perf(gpu): 8×4 reg-tile prefill GEMM — 2.3x on Pixel/PowerVR by @iamstuffed in #267
  • refactor(metal): migrate ViT vision encoder onto typed kernel params by @iamstuffed in #268
  • Improve wgpu context binding by @iamstuffed in #269
  • fix(wgpu): tile prefill attention over queries to fit the storage-binding limit by @iamstuffed in #270
  • docs(wgpu): correct attention_prefill scores_buf sizing comments for query tiling by @iamstuffed in #271
  • perf(wgpu): online-softmax flash prefill attention — drop scores materialization by @iamstuffed in #272
  • perf(cpu): ARM SMMLA i8mm Q4_0 prefill GEMM + CI CPU benchmarks by @iamstuffed in #273
  • perf(cpu): parallelize the x86 Q4_0 GEMV across rows by @iamstuffed in #274
  • perf(cpu): AVX-512 VNNI int8 activation path for x86 GEMV by @iamstuffed in #275
  • perf(cpu): batched int8 prefill GEMM for x86 by @iamstuffed in #276
  • perf(cpu): reduce once per row in the AVX-512 f32 GEMV kernels by @iamstuffed in #277
  • chore(scripts): add host CPU profiling script by @iamstuffed in #278
  • ci: run batched-prefill parity on small GGUF fixtures by @iamstuffed in #279
  • feat(quant): Q4_1 support on the CPU path, and reject unsupported dtypes by @iamstuffed in #280
  • perf(cpu): AVX-512 VNNI Q4_K/Q6_K int8 GEMV + batched prefill GEMM by @iamstuffed in #281
  • perf(cpu): admit K-quants on the dense-transformer batched prefill path by @iamstuffed in #282
  • perf(cpu): halve the acc dependency chain in the AVX-512 row kernels by @iamstuffed in #283
  • docs: record why DECODE_MAX_AUTO is 12; add a dispatch-cost microbench by @iamstuffed in #284
  • perf(cpu): widen TILE_N to 8, and fix the benchmark that hid it by @iamstuffed in #285
  • perf(cpu): row-tile the Q4_0/Q8_0 prefill GEMM (+19%) by @iamstuffed in #286
  • chore: release 0.3.1 by @iamstuffed in #287
  • perf(cpu): run the x86 int8 GEMM/GEMV from the AVX2 tier up, not VNNI only by @iamstuffed in #288
  • perf(cpu): SIMD flash attention + wider prefill parallelism on x86 by @iamstuffed in #289
  • perf(cpu): defer the K-quant GEMM reduction into a per-column accumulator by @iamstuffed in #290
  • perf(cpu): repack Q4_0 weights into an 8-row interleave for prefill by @iamstuffed in #291
  • perf(cpu): repack Q4_K weights into an 8-row interleave for prefill by @iamstuffed in #292
  • perf(cpu): route K-quant decode through the narrow decode pool by @iamstuffed in #293
  • ci(bench): add a best-effort llama.cpp head-to-head to the benchmark job by @iamstuffed in #294
  • perf(cpu): multi-accumulator Q4_K/Q6_K decode dot (+10% decode) by @iamstuffed in #295
  • perf(cpu,metal): batch Q4_1 tensors in prefill instead of whole-model fallback by @iamstuffed in #296
  • perf(cpu): ARM i8mm/SMMLA Q4_K prefill GEMM by @iamstuffed in #297
  • perf(cpu): ARM i8mm/SMMLA Q6_K prefill GEMM by @iamstuffed in #298
  • perf(cpu): run the x86 prefill GEMM on the pinned RowPool, not rayon by @iamstuffed in #299
  • perf(cpu): f16 KV cache for decode-at-depth by @iamstuffed in #300
  • perf(cpu): f16 KV cache for LFM2 decode + prefill by @iamstuffed in #301
  • perf(cpu): run prefill attention on the pinned RowPool + widen LFM2 to query heads by @iamstuffed in #302
  • perf(cpu): active-sized barrier + work cap for the prefill GEMM pool by @iamstuffed in #303
  • perf(cpu): AVX2 decode-attention kernels + parallel head loop by @iamstuffed in #304
  • perf(cpu): f16 KV snapshot + n_keep shift by @iamstuffed in #305
  • perf(cpu): size the decode pool from the model, not a flat cap by @iamstuffed in #306
  • perf(cpu): hoist Q4_K decode min-term activation sums out of the row loop by @iamstuffed in #307
  • feat(gpu,metal): TurboQuant KV-cache compression on both GPU backends by @iamstuffed in #308
  • docs(wasm): fix a broken intra-doc link, and gate cera-wasm rustdoc in CI by @iamstuffed in #314
  • feat(wasm): request TurboQuant KV compression from WebGpuSession by @iamstuffed in #313
  • fix(test): accept a tied argmax in the batched-prefill parity check by @iamstuffed in #315
  • feat: greedy speculative decoding (dense CPU, prompt-lookup) by @iamstuffed in #310
  • perf(gpu): keep the wgpu prefill GEMM's accumulators in registers (12-15x) by @iamstuffed in #311
  • perf(gpu): TILE_K 32->16 for the wgpu reg-tile GEMM, clearing the WebGPU floor by @iamstuffed in #312
  • perf(gpu): unspill the decode GEMVs — +17% Q4_0, +18% Q4_K_M by @iamstuffed in #316
  • fix(test): make the sysmem fit test deterministic by @iamstuffed in #317
  • perf(gpu): run the LFM2 conv block in one compute pass (+17% decode) by @iamstuffed in #318
  • perf(gpu): stop paying for separate GPU round trips in greedy decode (~1.85x) by @iamstuffed in #319
  • perf(gpu): run the LM head on the weight as stored, not an f16 copy (+10%) by @iamstuffed in #320
  • perf(gpu): word-load the Q6_K GEMV (+74% kernel, +11.6% decode on top of #320) by @iamstuffed in #321
  • fix(bench): remove three measurement defects from the GEMV harness by @iamstuffed in #322
  • feat(metal): Q5_K support, and a CI leg that actually runs the MSL kernels by @iamstuffed in #324
  • perf(gpu): batched-prefill GEMM for Q5_K on wgpu by @iamstuffed in #325
  • perf(metal): word-load the Q4_K decode GEMV (~30% faster decode) by @iamstuffed in #326
  • perf(cpu): batch the LM-head projection in forward_prefill_logits_all by @iamstuffed in #327
  • fix(cpu): run the Q4_1 decode GEMV through the prefill GEMM at n=1 by @iamstuffed in #328
  • refactor(spec): route the speculative-decoding KV rewind through the model by @iamstuffed in #329
  • chore: release 0.4.0 + reconcile docs with the 0.3.1..HEAD diff by @iamstuffed in #323
  • docs: remove em dashes from READMEs and documentation by @iamstuffed in #332
  • feat(wgpu): migrate to wgpu 30 and route the prefill GEMM around naga via Slang SPIR-V passthrough by @iamstuffed in #333
  • perf(wgpu): port the K-quant prefill GEMM loaders to Slang SPIR-V passthrough by @iamstuffed in #334
  • style(clippy): satisfy is_multiple_of and too_many_arguments under --all-features by @iamstuffed in #335
  • docs(benchmarks): add CPU vs wgpu vs Metal backend comparison on M1 Max by @iamstuffed in #336
  • fix(wgpu): batched F32 prefill loader, kill the whole-model bail by @iamstuffed in #337
  • feat(gpu): Slang multi-target shaders (one source to WGSL + MSL), piloted on softmax and the Q8_0 GEMM by @iamstuffed in #338
  • feat(gpu): Slang migration Phase 1a (gelu, bias_add, elementwise, rope) by @iamstuffed in #339
  • feat(gpu): Slang migration Phase 1b-i (per_head_rmsnorm, layernorm_batch, rmsnorm_batch) by @iamstuffed in #340
  • feat(gpu): Slang migration Phase 1b-ii (argmax_f32, rmsnorm) by @iamstuffed in #341
  • feat(gpu): migrate the conv1d tier to Slang (Phase 1c-i) by @iamstuffed in #342
  • fix(cpu): give rayon's global pool a deterministic width and affinity by @iamstuffed in #344
  • perf(cpu): run the aarch64 i8mm prefill GEMMs on the RowPool, not rayon by @iamstuffed in #345
  • perf(cpu): drop the unmeasured thread cap, add prefill width and pool stats by @iamstuffed in #346
  • perf(cpu): size steal chunks by core capacity (+22% prefill at 8 threads) by @iamstuffed in #347
  • build: track Cargo.lock so CI builds are reproducible by @iamstuffed in #349
  • docs(benchmarks): re-measure cera vs llama.cpp, and fix the harness that biased it by @iamstuffed in #343
  • perf(cpu): stop pinning the prefill pool once it outgrows the fast cores (+55% prefill at 8 threads) by @iamstuffed in #348
  • docs(build): correct the bump-version guidance now that Cargo.lock is tracked by @iamstuffed in #350
  • perf(simd): cut the Q4_K i8mm GEMM to 45 instructions per smmla by @iamstuffed in #351
  • docs(benchmarks): record the topology a run had, and what CI can't see by @iamstuffed in #352
  • fix(cpu): open-code the f16 widen, and declare the feature it needs by @iamstuffed in #353
  • feat(cpu): run unquantized F16 and BF16 GGUFs instead of panicking by @iamstuffed in #354
  • perf(prefill): batch Q5_K through the BLAS route, 4 -> 224 tok/s by @iamstuffed in #355
  • refactor(shaders): run the generated Slang kernels, delete the handwritten twins by @iamstuffed in #356
  • fix(cpu): correct six doc and coverage defects from the f16 widen merge by @iamstuffed in #357
  • test(shaders): fail CI when a doc comment drifts off its shader constant by @iamstuffed in #358
  • perf(metal): port the Q5_K GEMV to the llama.cpp kernel, 1.75x decode by @iamstuffed in #359
  • perf(metal): recover the Slang GEMM gap with an MSL post-pass by @iamstuffed in #361
  • perf(wgpu): rewrite the Q5_K GEMV, 1.89x decode by @iamstuffed in #360
  • ci: move every action we control off the deprecated Node 20 runtime by @iamstuffed in #363
  • feat(flutter): ship a working, publishable plugin on all five native platforms and the web by @iamstuffed in #362
  • docs(cpu): document the serial fallbacks and lint the combos they live in by @iamstuffed in #366
  • fix(ci): stop RUSTFLAGS from deleting +simd128 from every wasm build by @iamstuffed in #367
  • fix(ci): repair the duplicate env key that made ci.yml invalid on main by @iamstuffed in #369
  • fix(tokenizer): render the chat templates that call Python methods by @iamstuffed in #370
  • feat(wasm): reach parity with cera-ffi, and cache bundles in the browser by @iamstuffed in #364
  • ci(web): deploy the Flutter WebGPU demo to Cloudflare Pages by @iamstuffed in #365
  • feat(example): show what CPU and GPU actually cost in the browser by @iamstuffed in #368
  • ci(dart): gate dart format, and make it mean one thing by @iamstuffed in #371
  • fix(tokenizer): name the dbrx pretokenizer instead of warning on it by @iamstuffed in #372
  • test(oracle): fail instead of skipping when a model GGUF is absent by @iamstuffed in #374
  • fix(example): one model picker for both pages, and a way to stop a run the page walked away from by @iamstuffed in #375
  • feat/gpu audio decoder wgpu by @iamstuffed in #376
  • feat(audio): run the ISTFT on the GPU for both backends by @iamstuffed in #377
  • chore(third_party): vendor uniffi-bindgen-dart as a pin plus a patch series by @iamstuffed in #378
  • test(flutter): assert the empty-state copy the example actually renders by @iamstuffed in #382
  • feat(audio): run the Conformer audio encoder on Metal by @iamstuffed in #379
  • feat(audio): run the log-mel front-end on the GPU by @iamstuffed in #380
  • feat(lfm2moe): run LFM2.5-8B-A1B on CPU, Metal and wgpu by @iamstuffed in #383
  • ci: set up Antigravity code review workflow with configurable effort levels by @iamstuffed in #391
  • feat(bundle): support Hugging Face model loading and zero-disk streaming quantization by @iamstuffed in #390
  • feat(vad): add native Silero VAD v5 engine, GGUF exporter, CLI, and Dart/Flutter bindings by @iamstuffed in #392
  • feat(bundle): add QAD quantization tag parsing and preference ranking for Hugging Face models by @iamstuffed in #394
  • ci(web): publish the WebGPU demo to a Hugging Face Space on request by @iamstuffed in #381
  • feat(perf): vision ViT optimization, async WebGPU readbacks, and CLI sampling defaults by @iamstuffed in #385
  • feat(flutter): MVI architecture, dark theme, model picker, and backend settings by @iamstuffed in #386
  • feat(audio): microphone input, silence trimming, normalization, and ASR engine support by @iamstuffed in #387
  • feat(audio): WebGPU Depthformer acceleration, 4 voice modes, and playback exclusivity by @iamstuffed in #388
  • chore: bump version to 0.5.0 and update CHANGELOG and README documentation by @iamstuffed in #393
  • fix(bundle): align GenerationDefaults::Audio fields with sampling parameters in hf loader by @iamstuffed in #395
  • feat(speculative): DSpark sidecar, FreeToken semantic caching, TurboQuant, and zero-allocation GPU verification by @iamstuffed in #397
  • fix(audio): prevent premature audio cutoff and align cross-platform silence watchdog by @iamstuffed in #399
  • ci: add pub.dev automated publishing flow for cera_ffi and cera_ffi_flutter by @iamstuffed in #396
  • fix(ci): add sha256sum fallback on Windows runners and validate NPM_TOKEN by @iamstuffed in #400

Full Changelog: v0.2.2...v0.5.0