From 813f4decaf16cbcfaaae0c0c35694ff35752177c Mon Sep 17 00:00:00 2001 From: jhqxxx <18280426169@163.com> Date: Sat, 14 Mar 2026 20:23:07 +0800 Subject: [PATCH] update fmt --- README.md | 4 ++++ README.zh-CN.md | 4 ++++ docs/changelog.md | 4 ++++ docs/changelog.zh-CN.md | 4 ++++ tests/test_deepseek_ocr.rs | 4 ++-- tests/test_fun_asr_nano.rs | 4 ++-- tests/test_gelab_zero.rs | 4 ++-- tests/test_gguf_qwen3_5.rs | 4 ++-- tests/test_glm_asr_nano.rs | 4 ++-- tests/test_glm_ocr.rs | 4 ++-- tests/test_hunyuan_ocr.rs | 4 ++-- tests/test_minicpm4.rs | 4 ++-- tests/test_paddleocr_vl.rs | 4 ++-- tests/test_qwen2_5vl.rs | 4 ++-- tests/test_qwen3.rs | 4 ++-- tests/test_qwen3_5.rs | 4 ++-- tests/test_qwen3_asr.rs | 4 ++-- tests/test_qwen3vl.rs | 8 ++++---- tests/test_robo_brain.rs | 4 ++-- 19 files changed, 48 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index 9164227..39845f8 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,10 @@ aha is a high-performance, cross-platform AI inference engine built with Rust and the Candle framework. It brings state-of-the-art AI models to your local machine—no API keys, no cloud dependencies, just pure, fast AI running directly on your hardware. ## Changelog +### 2026-03-14 +- update rust version +- Added Qwen3.5 gguf support, but the 4B model still has issues; to be resolved. + ### v0.2.2 (2026-03-07) - Added GLM-OCR model diff --git a/README.zh-CN.md b/README.zh-CN.md index 0c1f177..43863d9 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -25,6 +25,10 @@ aha 是一款基于 Rust 和 Candle 框架构建的高性能跨平台 AI 推理引擎。将最先进的 AI 模型带到您的本地机器——无需 API 密钥,无需云依赖,纯粹、快速的 AI,直接在您的硬件上运行。 ## 更新日志 +### 2026-03-14 +- 更新rust版本 +- 增加了对 Qwen3.5 gguf 的支持,但 4B 模型仍然存在问题;待解决。 + ### v0.2.2 (2026-03-07) - 新增GLM-OCR 模型 diff --git a/docs/changelog.md b/docs/changelog.md index 640c49e..0dffc8c 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -5,6 +5,10 @@ All notable changes to aha will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +### 2026-03-14 +- update rust version +- Added Qwen3.5 gguf support, but the 4B model still has issues; to be resolved. + ## [0.2.2] (2026-03-07) - Added GLM-OCR model diff --git a/docs/changelog.zh-CN.md b/docs/changelog.zh-CN.md index 0655ca1..9f378d8 100644 --- a/docs/changelog.zh-CN.md +++ b/docs/changelog.zh-CN.md @@ -5,6 +5,10 @@ 格式基于 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.0.0/), 本项目遵循 [语义化版本](https://semver.org/lang/zh-CN/spec/v2.0.0.html)。 +### 2026-03-14 +- 更新rust版本 +- 增加了对 Qwen3.5 gguf 的支持,但 4B 模型仍然存在问题;待解决。 + ## [0.2.2] (2026-03-07) - 新增 GLM-OCR 模型 diff --git a/tests/test_deepseek_ocr.rs b/tests/test_deepseek_ocr.rs index 10e9bf5..5aefd5e 100644 --- a/tests/test_deepseek_ocr.rs +++ b/tests/test_deepseek_ocr.rs @@ -44,8 +44,8 @@ fn deepseek_ocr_generate() -> Result<()> { let res = model.generate(mes)?; let i_duration = i_start.elapsed(); println!("generate: \n {:?}", res); - if res.usage.is_some() { - let num_token = res.usage.as_ref().unwrap().total_tokens; + if let Some(usage) = &res.usage { + let num_token = usage.total_tokens; let duration_secs = i_duration.as_secs_f64(); let tps = num_token as f64 / duration_secs; println!("Tokens per second (TPS): {:.2}", tps); diff --git a/tests/test_fun_asr_nano.rs b/tests/test_fun_asr_nano.rs index a9af346..d2f8cf8 100644 --- a/tests/test_fun_asr_nano.rs +++ b/tests/test_fun_asr_nano.rs @@ -42,8 +42,8 @@ fn fun_asr_nano_generate() -> Result<()> { let res = fun_asr_model.generate(mes)?; let i_duration = i_start.elapsed(); println!("generate: \n {:?}", res); - if res.usage.is_some() { - let num_token = res.usage.as_ref().unwrap().total_tokens; + if let Some(usage) = &res.usage { + let num_token = usage.total_tokens; let duration_secs = i_duration.as_secs_f64(); let tps = num_token as f64 / duration_secs; println!("Tokens per second (TPS): {:.2}", tps); diff --git a/tests/test_gelab_zero.rs b/tests/test_gelab_zero.rs index 211f4e5..0b75033 100644 --- a/tests/test_gelab_zero.rs +++ b/tests/test_gelab_zero.rs @@ -66,8 +66,8 @@ fn gelab_zero_generate() -> Result<()> { let res = qwen3vl.generate(mes)?; let i_duration = i_start.elapsed(); println!("generate: \n {:?}", res); - if res.usage.is_some() { - let num_token = res.usage.as_ref().unwrap().total_tokens; + if let Some(usage) = &res.usage { + let num_token = usage.total_tokens; let duration_secs = i_duration.as_secs_f64(); let tps = num_token as f64 / duration_secs; println!("Tokens per second (TPS): {:.2}", tps); diff --git a/tests/test_gguf_qwen3_5.rs b/tests/test_gguf_qwen3_5.rs index 03d4f96..85c9946 100644 --- a/tests/test_gguf_qwen3_5.rs +++ b/tests/test_gguf_qwen3_5.rs @@ -53,8 +53,8 @@ fn gguf_test() -> Result<()> { let res = gguf_qwen3_5.generate(mes)?; let i_duration = i_start.elapsed(); println!("generate: \n {:?}", res); - if res.usage.is_some() { - let num_token = res.usage.as_ref().unwrap().total_tokens; + if let Some(usage) = &res.usage { + let num_token = usage.total_tokens; let duration_secs = i_duration.as_secs_f64(); let tps = num_token as f64 / duration_secs; println!("Tokens per second (TPS): {:.2}", tps); diff --git a/tests/test_glm_asr_nano.rs b/tests/test_glm_asr_nano.rs index 49e9ebe..42d24f3 100644 --- a/tests/test_glm_asr_nano.rs +++ b/tests/test_glm_asr_nano.rs @@ -43,8 +43,8 @@ fn glm_asr_nano_generate() -> Result<()> { let res = glm_asr_model.generate(mes)?; let i_duration = i_start.elapsed(); println!("generate: \n {:?}", res); - if res.usage.is_some() { - let num_token = res.usage.as_ref().unwrap().total_tokens; + if let Some(usage) = &res.usage { + let num_token = usage.total_tokens; let duration_secs = i_duration.as_secs_f64(); let tps = num_token as f64 / duration_secs; println!("Tokens per second (TPS): {:.2}", tps); diff --git a/tests/test_glm_ocr.rs b/tests/test_glm_ocr.rs index 2b94192..cb44df3 100644 --- a/tests/test_glm_ocr.rs +++ b/tests/test_glm_ocr.rs @@ -43,8 +43,8 @@ fn glm_ocr_generate() -> Result<()> { let res = model.generate(mes)?; let i_duration = i_start.elapsed(); println!("generate: \n {:?}", res); - if res.usage.is_some() { - let num_token = res.usage.as_ref().unwrap().total_tokens; + if let Some(usage) = &res.usage { + let num_token = usage.total_tokens; let duration_secs = i_duration.as_secs_f64(); let tps = num_token as f64 / duration_secs; println!("Tokens per second (TPS): {:.2}", tps); diff --git a/tests/test_hunyuan_ocr.rs b/tests/test_hunyuan_ocr.rs index eee1f59..b92a828 100644 --- a/tests/test_hunyuan_ocr.rs +++ b/tests/test_hunyuan_ocr.rs @@ -43,8 +43,8 @@ fn hunyuan_ocr_generate() -> Result<()> { let res = model.generate(mes)?; let i_duration = i_start.elapsed(); println!("generate: \n {:?}", res); - if res.usage.is_some() { - let num_token = res.usage.as_ref().unwrap().total_tokens; + if let Some(usage) = &res.usage { + let num_token = usage.total_tokens; let duration_secs = i_duration.as_secs_f64(); let tps = num_token as f64 / duration_secs; println!("Tokens per second (TPS): {:.2}", tps); diff --git a/tests/test_minicpm4.rs b/tests/test_minicpm4.rs index f081a94..36fd65e 100644 --- a/tests/test_minicpm4.rs +++ b/tests/test_minicpm4.rs @@ -37,8 +37,8 @@ fn minicpm_generate() -> Result<()> { let result = model.generate(mes)?; let i_duration = i_start.elapsed(); println!("generate: \n {:?}", result); - if result.usage.is_some() { - let num_token = result.usage.as_ref().unwrap().total_tokens; + if let Some(usage) = &result.usage { + let num_token = usage.total_tokens; let duration_secs = i_duration.as_secs_f64(); let tps = num_token as f64 / duration_secs; println!("Tokens per second (TPS): {:.2}", tps); diff --git a/tests/test_paddleocr_vl.rs b/tests/test_paddleocr_vl.rs index 0262810..3afe232 100644 --- a/tests/test_paddleocr_vl.rs +++ b/tests/test_paddleocr_vl.rs @@ -44,8 +44,8 @@ fn paddleocr_vl_generate() -> Result<()> { let res = model.generate(mes)?; let i_duration = i_start.elapsed(); println!("generate: \n {:?}", res); - if res.usage.is_some() { - let num_token = res.usage.as_ref().unwrap().total_tokens; + if let Some(usage) = &res.usage { + let num_token = usage.total_tokens; let duration_secs = i_duration.as_secs_f64(); let tps = num_token as f64 / duration_secs; println!("Tokens per second (TPS): {:.2}", tps); diff --git a/tests/test_qwen2_5vl.rs b/tests/test_qwen2_5vl.rs index 652aa7b..cef4781 100644 --- a/tests/test_qwen2_5vl.rs +++ b/tests/test_qwen2_5vl.rs @@ -50,8 +50,8 @@ fn qwen2_5vl_generate() -> Result<()> { let result = model.generate(mes)?; let i_duration = i_start.elapsed(); println!("generate: \n {:?}", result); - if result.usage.is_some() { - let num_token = result.usage.as_ref().unwrap().total_tokens; + if let Some(usage) = &result.usage { + let num_token = usage.total_tokens; let duration_secs = i_duration.as_secs_f64(); let tps = num_token as f64 / duration_secs; println!("Tokens per second (TPS): {:.2}", tps); diff --git a/tests/test_qwen3.rs b/tests/test_qwen3.rs index 2ba8b41..cc1b944 100644 --- a/tests/test_qwen3.rs +++ b/tests/test_qwen3.rs @@ -34,8 +34,8 @@ fn qwen3_0_6b_generate() -> Result<()> { let result = model.generate(mes)?; let i_duration = i_start.elapsed(); println!("generate: \n {:?}", result); - if result.usage.is_some() { - let num_token = result.usage.as_ref().unwrap().total_tokens; + if let Some(usage) = &result.usage { + let num_token = usage.total_tokens; let duration_secs = i_duration.as_secs_f64(); let tps = num_token as f64 / duration_secs; println!("Tokens per second (TPS): {:.2}", tps); diff --git a/tests/test_qwen3_5.rs b/tests/test_qwen3_5.rs index b9d8ff0..f333c43 100644 --- a/tests/test_qwen3_5.rs +++ b/tests/test_qwen3_5.rs @@ -46,8 +46,8 @@ fn qwen3_5_generate() -> Result<()> { let res = qwen3_5.generate(mes)?; let i_duration = i_start.elapsed(); println!("generate: \n {:?}", res); - if res.usage.is_some() { - let num_token = res.usage.as_ref().unwrap().total_tokens; + if let Some(usage) = &res.usage { + let num_token = usage.total_tokens; let duration_secs = i_duration.as_secs_f64(); let tps = num_token as f64 / duration_secs; println!("Tokens per second (TPS): {:.2}", tps); diff --git a/tests/test_qwen3_asr.rs b/tests/test_qwen3_asr.rs index dc75cd4..f9d5736 100644 --- a/tests/test_qwen3_asr.rs +++ b/tests/test_qwen3_asr.rs @@ -39,8 +39,8 @@ fn qwen3_asr_generate() -> Result<()> { let res = model.generate(mes)?; let i_duration = i_start.elapsed(); println!("generate: \n {:?}", res); - if res.usage.is_some() { - let num_token = res.usage.as_ref().unwrap().total_tokens; + if let Some(usage) = &res.usage { + let num_token = usage.total_tokens; let duration_secs = i_duration.as_secs_f64(); let tps = num_token as f64 / duration_secs; println!("Tokens per second (TPS): {:.2}", tps); diff --git a/tests/test_qwen3vl.rs b/tests/test_qwen3vl.rs index f03cb54..22915a3 100644 --- a/tests/test_qwen3vl.rs +++ b/tests/test_qwen3vl.rs @@ -47,8 +47,8 @@ fn qwen3vl_thinking_generate() -> Result<()> { let res = qwen3vl.generate(mes)?; let i_duration = i_start.elapsed(); println!("generate: \n {:?}", res); - if res.usage.is_some() { - let num_token = res.usage.as_ref().unwrap().total_tokens; + if let Some(usage) = &res.usage { + let num_token = usage.total_tokens; let duration_secs = i_duration.as_secs_f64(); let tps = num_token as f64 / duration_secs; println!("Tokens per second (TPS): {:.2}", tps); @@ -98,8 +98,8 @@ fn qwen3vl_generate() -> Result<()> { let res = qwen3vl.generate(mes)?; let i_duration = i_start.elapsed(); println!("generate: \n {:?}", res); - if res.usage.is_some() { - let num_token = res.usage.as_ref().unwrap().total_tokens; + if let Some(usage) = &res.usage { + let num_token = usage.total_tokens; let duration_secs = i_duration.as_secs_f64(); let tps = num_token as f64 / duration_secs; println!("Tokens per second (TPS): {:.2}", tps); diff --git a/tests/test_robo_brain.rs b/tests/test_robo_brain.rs index ecf1cde..974cb6e 100644 --- a/tests/test_robo_brain.rs +++ b/tests/test_robo_brain.rs @@ -38,8 +38,8 @@ fn robo_brain_generate() -> Result<()> { let result = model.generate(mes)?; let i_duration = i_start.elapsed(); println!("generate: \n {:?}", result); - if result.usage.is_some() { - let num_token = result.usage.as_ref().unwrap().total_tokens; + if let Some(usage) = &result.usage { + let num_token = usage.total_tokens; let duration_secs = i_duration.as_secs_f64(); let tps = num_token as f64 / duration_secs; println!("Tokens per second (TPS): {:.2}", tps);