From 2e9bd20fed92afcfeecba24f81140098f5670e60 Mon Sep 17 00:00:00 2001 From: Raffa Date: Tue, 9 Jun 2026 18:14:01 +0200 Subject: [PATCH] release: v1.32.01 Public snapshot of HearoPilot v1.32.01. Highlights since v1.25.0: - Rebrand to Gemma 3 1B on-device LLM with Q8_0 / IQ4_NL variant selection - New app branding (equalizer + AI sparkle logo) - Background foreground services for model download and LLM processing - Dependency update: sherpa-onnx 1.13.2 (onnxruntime 1.24.4) + llama.cpp b9574 Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/workflows/build.yml | 4 +- .gitignore | 3 + README.md | 70 +++++- app/build.gradle.kts | 4 +- app/src/main/ic_launcher-playstore.png | Bin 11194 -> 21119 bytes .../main/jniLibs/arm64-v8a/libonnxruntime.so | 4 +- .../jniLibs/arm64-v8a/libsherpa-onnx-c-api.so | 4 +- .../arm64-v8a/libsherpa-onnx-cxx-api.so | 4 +- .../jniLibs/arm64-v8a/libsherpa-onnx-jni.so | 4 +- .../res/drawable/ic_launcher_background.xml | 13 +- .../res/drawable/ic_launcher_foreground.xml | 99 ++++++-- .../res/drawable/ic_launcher_monochrome.xml | 69 ++++++ .../main/res/drawable/logo_hearo_pilot_3.png | Bin 23343 -> 0 bytes .../res/drawable/logo_hearo_pilot_new.xml | 87 +++++-- .../res/mipmap-anydpi-v26/ic_launcher.xml | 3 +- .../mipmap-anydpi-v26/ic_launcher_round.xml | 1 + app/src/main/res/mipmap-hdpi/ic_launcher.webp | Bin 938 -> 898 bytes .../mipmap-hdpi/ic_launcher_foreground.webp | Bin 1350 -> 660 bytes .../res/mipmap-hdpi/ic_launcher_round.webp | Bin 2736 -> 928 bytes app/src/main/res/mipmap-mdpi/ic_launcher.webp | Bin 702 -> 744 bytes .../mipmap-mdpi/ic_launcher_foreground.webp | Bin 868 -> 438 bytes .../res/mipmap-mdpi/ic_launcher_round.webp | Bin 1760 -> 766 bytes .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin 1486 -> 1372 bytes .../mipmap-xhdpi/ic_launcher_foreground.webp | Bin 2084 -> 930 bytes .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin 3844 -> 1414 bytes .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin 2190 -> 1818 bytes .../mipmap-xxhdpi/ic_launcher_foreground.webp | Bin 3516 -> 1336 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 5920 -> 1924 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin 2946 -> 2376 bytes .../ic_launcher_foreground.webp | Bin 4698 -> 1792 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 8472 -> 2490 bytes .../hearopilot/app/data/config/ModelConfig.kt | 4 +- .../app/domain/model/LlmModelVariant.kt | 4 +- .../domain/usecase/llm/InsightOutputParser.kt | 48 ++-- lib-llama-android/src/main/cpp/CMakeLists.txt | 5 +- lib-llama-android/src/main/cpp/ai_chat.cpp | 61 ++++- .../main/jniLibs/arm64-v8a/libggml-base.so | 4 +- .../libggml-cpu-android_armv8.0_1.so | 4 +- .../libggml-cpu-android_armv8.2_1.so | 4 +- .../libggml-cpu-android_armv8.2_2.so | 4 +- .../libggml-cpu-android_armv8.6_1.so | 4 +- .../libggml-cpu-android_armv9.0_1.so | 4 +- .../libggml-cpu-android_armv9.2_1.so | 4 +- .../libggml-cpu-android_armv9.2_2.so | 4 +- .../src/main/jniLibs/arm64-v8a/libggml.so | 2 +- .../src/main/jniLibs/arm64-v8a/libkleidiai.so | 4 +- .../src/main/jniLibs/arm64-v8a/libllama.so | 4 +- .../k2fsa/sherpa/onnx/OfflineRecognizer.kt | 224 +++++++++++++++++- .../com/k2fsa/sherpa/onnx/OfflineStream.kt | 6 + .../main/jniLibs/arm64-v8a/libonnxruntime.so | 4 +- .../jniLibs/arm64-v8a/libsherpa-onnx-c-api.so | 4 +- .../arm64-v8a/libsherpa-onnx-cxx-api.so | 4 +- .../jniLibs/arm64-v8a/libsherpa-onnx-jni.so | 4 +- 53 files changed, 657 insertions(+), 122 deletions(-) create mode 100644 app/src/main/res/drawable/ic_launcher_monochrome.xml delete mode 100644 app/src/main/res/drawable/logo_hearo_pilot_3.png diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6d8052f..a6b0f78 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -30,9 +30,9 @@ jobs: run: | echo "y" | $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager "ndk;29.0.13113456" - - name: Clone llama.cpp (pinned to b8390) + - name: Clone llama.cpp (pinned to b9574) run: | - git clone --depth 1 --branch b8390 https://github.com/ggerganov/llama.cpp.git $GITHUB_WORKSPACE/../llama.cpp-master + git clone --depth 1 --branch b9574 https://github.com/ggerganov/llama.cpp.git $GITHUB_WORKSPACE/../llama.cpp-master - name: Remove prebuilt native libs (compiled from source in CI) run: rm -rf lib-llama-android/src/main/jniLibs diff --git a/.gitignore b/.gitignore index bc060d7..ad1888f 100644 --- a/.gitignore +++ b/.gitignore @@ -41,3 +41,6 @@ CLAUDE.md # Build artifacts build_log.txt + +# Local Claude Code config (never publish) +.claude/ diff --git a/README.md b/README.md index 60b0ff6..b865307 100644 --- a/README.md +++ b/README.md @@ -4,10 +4,6 @@ [![Min SDK](https://img.shields.io/badge/Min%20SDK-API%2030-green.svg)](https://developer.android.com/about/versions/11/highlights) [![Build](https://github.com/Helldez/HearoPilot-App/actions/workflows/build.yml/badge.svg)](https://github.com/Helldez/HearoPilot-App/actions/workflows/build.yml) - - Get it on Google Play - - **On-device audio transcription and AI insights for Android** HearoPilot combines a local Speech-to-Text engine with a local Large Language Model to deliver @@ -19,7 +15,7 @@ server. ## Features - **Real-time transcription** — streaming STT via Sherpa-ONNX (NeMo Parakeet TDT 0.6B Int8) -- **On-device AI insights** — contextual analysis via local LLM, fully on-device +- **On-device AI insights** — contextual analysis via llama.cpp (Gemma 3 1B Q6_K) - **100% offline** — privacy-first; no network calls during recording - **Four recording modes** — Simple Listening, Short Meeting, Long Meeting, Real-Time Translation - **25 UI languages** — full i18n including localized LLM system prompts @@ -133,7 +129,7 @@ AudioRecord (16 kHz mono, PCM 16-bit, AudioSource.MIC) | Parameter | Value | Rationale | |---|---|---| -| `AudioSource.MIC` | — | Delivers raw PCM; `VOICE_RECOGNITION` activates HAL noise reduction on some devices that degrades transducer accuracy | +| `AudioSource.MIC` | — | Delivers raw PCM; `VOICE_RECOGNITION` activates HAL noise reduction on some devices (e.g. OnePlus) that degrades transducer accuracy | | Recording thread priority | `URGENT_AUDIO` | Prevents audio buffer drops under CPU load | | ADPF hint (VAD/ASR thread) | 50 ms target | Signals scheduler to prefer big cores on big.LITTLE SoCs; prevents ASR parking on efficiency cores | | VAD window size | 512 samples | Standard Silero-VAD frame size | @@ -172,6 +168,9 @@ models to echo the wrapper keywords instead of translating. ### llama.cpp Optimizations (native layer — `ai_chat.cpp`) `libai-chat.so` is compiled from C++ source on every build (CMake, `externalNativeBuild`). +The prebuilt `.so` was removed in commit `2380ef7`; always run `./gradlew assembleDebug` after +changing any C++ parameter to pick up the new binary. + | Optimization | Value / Setting | Rationale | |---|---|---| | Context size | 4096 tokens | Covers worst-case LONG_MEETING (~3968 tokens) while halving KV cache memory vs 8192 | @@ -209,7 +208,7 @@ Token budget flows from `SyncSttLlmUseCase` → `LlmRepository` → `LlamaAndroi ### Indicative Targets -- STT latency: < 200 ms per segment (high-end ARM device) +- STT latency: < 200 ms per segment (Snapdragon 888) - LLM inference: 2–8 s per insight (varies by chip and mode) - Memory footprint: < 800 MB active (STT + LLM loaded) @@ -254,7 +253,7 @@ git lfs install # 2. Clone (LFS objects are downloaded automatically) git clone https://github.com/Helldez/HearoPilot-App.git -cd HearoPilot +cd HearoPilot-App # 3. Configure Firebase # Copy the example file and fill in your own Firebase project credentials. @@ -285,6 +284,32 @@ adb install app/build/outputs/apk/debug/app-debug.apk --- +## Project History + +Key milestones from MVP to the current release: + +- Initial MVP — on-device STT + LLM, Clean Architecture +- Foreground Service for screen-off recording +- Room database for persistent sessions +- Custom `ModelDownloadManager` with partial-file resume +- VAD configurability (threshold, min silence, max speech) +- GC-free audio buffer + min audio context gate +- i18n: 25 languages with fully localized LLM system prompts +- Material Design 3 + dark mode +- Four recording modes (Simple, Short Meeting, Long Meeting, Real-Time Translation) +- R8 full-mode + ProGuard +- Stateless LLM inference + power optimizations +- LLM system prompt KV cache reuse +- Adaptive LLM unload/reload for Long Meeting (kswapd ANR fix) +- Global transcription search (full-text, highlighted snippets) +- Inline editing of segments, insights, and tasks +- Dual LLM variant support (Q8\_0 / IQ4\_NL) with auto device-tier detection +- Foreground services for model download and LLM batch processing +- Adaptive conservative-thread logic with persisted learning +- `libai-chat.so` compiled from source via CMake (no prebuilt) + +--- + ## Localization Supported locales (25): `en`, `bg`, `cs`, `da`, `de`, `el`, `es`, `et`, `fi`, `fr`, `hr`, `hu`, @@ -296,6 +321,34 @@ consistent JSON parsing. --- +## Troubleshooting + +**App crashes on launch** +→ Check that `RECORD_AUDIO` permission is granted +→ Run `./gradlew.bat clean assembleDebug` and verify zero errors + +**STT produces no output** +→ Confirm the STT model is downloaded (check Settings) +→ Test on a physical device — emulator audio capture is unreliable +→ `adb logcat | grep SherpaOnnx` + +**AI Insights not generated** +→ Confirm the LLM model is downloaded +→ Device needs ~1.5 GB free RAM with the LLM model loaded +→ Check the status chip in the TopBar shows "Ready" +→ `adb logcat | grep "LlamaAndroid\|SyncSttLlm"` + +**Download stuck or slow** +→ Downloads resume from where they stopped — just retry +→ Ensure stable Wi-Fi; models are large (STT ~670 MB, LLM ~1 GB) + +**Transcription inaccurate** +→ Speak clearly at ~30 cm from the microphone +→ Reduce background noise +→ Do **not** use `VOICE_RECOGNITION` audio source (OnePlus HAL issue) + +--- + ## Roadmap - [x] Global transcription search (full-text, highlighted snippets) @@ -304,6 +357,7 @@ consistent JSON parsing. - [ ] Export sessions (TXT / JSON / PDF) - [ ] Speaker diarization - [ ] Home screen widget for quick record +- [ ] Optional end-to-end-encrypted cloud sync - [ ] Kotlin Multiplatform (iOS support) --- diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 32bb94b..55d9e68 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -20,8 +20,8 @@ android { applicationId = "com.hearopilot.app" minSdk = 30 targetSdk = 35 - versionCode = 20260327 - versionName = "1.25.00" + versionCode = 20260609 + versionName = "1.32.01" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png index 1ef0e76e6f71c73623f4236f5335bba4ba35bcf3..d070168e878cc0e7923e43baa4575359018e5e2b 100644 GIT binary patch literal 21119 zcmX6^cRbbq_rC+z-g{k}NGLLMFEW$WknB;&URiOkJ&VewTolU6CfP&@*Cu7twb!+- zJAU``{r%x_-Fsi>yv}-^_c`bFyh&yz`V6$Zv;Y8r!O-Bg1pojd{|f?8|MwEkt5XF4 zSm+tv*18|^dpE)(BWo&iW6mDo!TPcMXJ8tYl>9q)Eitt_>{^l_y#r8));Id^di@Ub zNySO6tZemU|Sq5l!?e4grdw6i~%Cen)5T-TsKg7>^bM-mQ)1LMb0T zSlo>mox3b(ADwfZdTcZmuDZV)dK!7E8Qu#l2p<)@gl@-11j zKiSvCnXmh7hlmaBZ%VOA0WoG6CUrIgZ0WrJrPa;sVnq}MO2@D8DP#KKz1r*NZ~>4w zK!BFO?Fxyw{VD@MKluNjBws!;sY=`rP?pudZk7P2f$LABYf#W-y<<^u5OoG1a1BI2 zC5|qrCTdd|fsFua>}NsT54DXQiu8hn$s9M~Feyx#2%D}W=p&H){s;wSrHmMK(ek`^ zo%#pG|491aowxr$o|b*_S1figM*UAR-ma)p)i@hcz9yR#16g_picn8KXkBRDO_+ok zuNes4&4klhevf#Ni2i>HQ2|Al=*v8KU-gkGSOWE&I)jQVU3#xm;3s_+dwM9G!rj1~ zEI;gM(m0ZmU?491!AR%7?P&=v`c#w=;$WBmUjUJ7Np(8XdF2-<^I4FBMtcI zz>ZVZfvvs2LaV_OJuQp${hIz2^dIrgq#!y~Se34){3;gtHGLe(iquBDz|0KRVkQxf z|6f)X?%5tV!f6@oAbpW==S0jg8mWllCp!Rb%2-sVDCTg=UqzwW2ZdY20*jMvPPtWi-RA2voL65g7S zOb`E0Mg2gbl9)(FG0-n)W@bO++y%M8Oi=_}2Z#gWi0N-B>`+YfjBdG=TePUH`VwFe zWd^_kjyOd#DLC@ z$e&t90GeVLw@C}rW^+8yTSKeSxNAljjsk*o4aoZd;v&;iE>SNX%pMf<7&FIEO>&rl z444TeTCk=ch30=@Us7D-G_n|FPlOL#=cO+;~Ua!>1q@mitr`c|BM~0 zjo3uXHU7;xic)7gC@=r%m_Ei5 z?W#|OTxWKOYW>d~M`N(h%V|J@u{9$GB^-0a2)xGd#hTF2 zC>92XHc)E-{6VKkXndzKR%TCzO=yP6f8ZEX4WAZ{`dr*8)(g|b%3vgAn6>!Ho)_9E zm%s=*!yed&;@W+2BhRY2^Na@B~`~%z0CCNXu@=1qm)s2 zGCjt(8t|FlB@@6-NTNq*p_x>J)^Dq3-_4=ncNfYKiIs+|_X8iqMV4Zq5S(y$<-ofS zcVlRr(8x|1l%u0KfU_=5yR#|IRhLF6iV7d9vo0hK@T+5Tp(a>SE+QGAw~K*Jmhk^R zmB2s;43@?>@|VK{fQ5IaN0bISh?^dl5Z zrxzOAQ`Z#x?0tlMuV4t*kS}Z%gHXw#!N;QueP;;T>R7h;h!l060&m% zJlL4m5S)+*?vBvbJ#`9y%l2^0!w^uM4K62#qj9Wkqgz=z!y%9j3f z0f?cIas!NUe2IPb)*tB$N{=JbXd?>Z+|!$m_C+qkZ)h3w`nt=TuF|>;0Uzj+@MwGL zy&(n)p-N)(7h^b!AV8bUSjZCOkVK>8 zt2|*Wm&VE9-j3eWDomzNz8;mJ11PYGg7c$;w=+~xpD}5WXI(T`c;KBYku4UC@J;4E zKgyqR6mAnbZ`c2Gs((C8087^sVNk}$9aS`nr24Whbo9kHkKgP8))h%Kgu}!Z-2_(x zz|uYXAA#(aLcWhwwEo*vGKzQ`JqkI?9WvBti^`mp68v9k{qloNNlTZc5)T{s)4=8O zXIgGnXx|7NWdp2Bhj+XKg40zN5Nt5jg(pyqgW%gncA7{DBiA!K5_!Sl6hVS>KwMxvQ%Qd@gfrVeb z1cbTC!{9VRCLdQ0Fwl{Mv+);?l%iY@!scRgQA!L#(%LsI420w%2E*c2MqG$DdL*HE z#Gj{KZ}PPtj~OpH?tx*JLN_4>3{>PeZk510@DL5PU@~&xM_)jZlj)3bm%}oCUT3r?$t^&Oo9QG9;3l1@9qm1 z&+e)T!Jd&GC!y@`M%poIx$#ORoqqC#BiGmm+c}x@&e?bf?ka z!Ts9;tBXwB8g(%R_hSAWMVE6zj0&+pO@M0F50e@u(GZO)%iXt|@re$y=hV(esJaY6302G47aLCrC)4Mx+6 zwu^k?W;?f->$GCs*u1YSRsWW%1}W}S6lA0A1GOzTb+MZvq5zo{U@ zo&XHQ0P*86E^NY6pZAg=QC_0(n6yHlYfx>(2*(HqQje3X#s7{0qkJEKm$+!TNc|ta z$5qNEayE*+05o#pQ#I|CS_69ZJHNvVk~=624a}l`%4y^$yEX?c#X=Qeo|ZNHNe;_i=?>O)#C4 z2J1tNDU-~zqm%$@+ys1!f2p0wvND~tdI#VTa)%slSF-mEpE7ADp2#L&77Kt7mR)5# z2%fmaMOVRx)S&ktg&rlrm~Z2?q;DnuZIs#>*L#IxLc(M`WJw#Z6Di|t?l7NE2A3aO zOWnW8SRbiVB+U{Mv8I!;wQ9-Gka1CiNqYcdXN`%ZMahL%&-MW*6deeRRs2g|bPMW= z9?+~X^>)>$U`>HIou2m5N+&bWHHPyx&?kRDhw$D{ph~PchaB;oDsr``)1Vj1j=eLi zdX)z?flQNGx_4SA3;FVSJ<0dr+0hD9T0!9>j2tUYJX%xoI{ZUaVl`Zz@t{p)S=;PE zKQzog{S^^~l1r!eb%!%UxJ$InSY?Idl3;#gg?gvJ{)jC)$)}*Jya(Aa(SC4m?ewG; zM&t<^0l+4%FlqKQ?mF*-+6{#9A>;urSO=jOkMP7K zluOoqLL+q@Sza(E)~g8BF|&KxK6+q0m4I4dQpf&tKOaCwdgEAcf1tR}3lE?)5;PEm z2-V@wCd_`CIwIxDc{~AEgj9He~SQp^1HbqbSp86LTK^Kkyp`gd(X6|q? z2!%Bd!0^6#g@H0j*#Ebw9;T*6Zr$m|D!^H!iusf?dPNWLPljk_NTMl1uvb902#K2JiR%1@jQ$5;5Cu4g zT8pIsDgBRs>XDw4!zN4wSN};^C-NGq?o>EF8@b95GV?~K;@?hNinW&N^OFKm72uT3 zFd}}u(+msIL_zhw*Xf?sTet~vLI6%<=(--Jd%}Yh*H|9^n8HhD5;+JuVz+DmyRj$8fFS)cg1!Kv3IE&jc>ccU<_j=)q@NDr8BzbH%3QOPtqoJ=O|%eU7Jc&v21E*$HA+LuKTOkpZ|9(>8oZV|hQo5(C zf2TYEk8G<%R>ZANX}dLQsOUvd7squ|>4HGfOsS0*g&)p)0R*r$p*FcY>6i*Mq%|HV zq-BC!&EhaozFR=fy-*h1k0_Nr{y{gP8;nclwknn1moPxHSj5Cl(wreF(p=reSGY@e zBqiE#V;V_S`~(uW0(fiTam9l9fS%HF63;Z%&k#}qlPENx%^{? z6F6*{0oc1|%Vnmi^9LD?H!NK~pU+9}n6m^C1qvvUf z*C=#@L8-lJ$dfsRjlYfez2OI=eJ=wz z#NE+PqLSRC$jEW+&%vsTh(1}p&WczmMkrziAQ6+j%f_QARBOHfdtoWr#2b(Lm!uw& zsQ$k3t5gleCP>X~m0Lf~zA=v$cKTrC?C8{EEZSzku_EF*w>_$xX0;9u%GW_E#VB1mC0Gr-_V40H(ZdX;!v3nAGc)4(=54v%wPSMkgK%esz)Z}&KX zth&s6l@bo*8bJbj_#!yz^i`CkX|C_j$s_>*a2f&s`c~(Q{l8w;3-hPHD||E?)(&Uv z!*BEv;xiu7aiSy4*ojW+scN2msyE66pPwfd^-?jZyZMgp7b3h@UkRuehP)VlD>MCk ze>Ulb#qT|Z5b~2&BIS(+@eVpVMuMKEl4cdc^MCv3vRNy>iu3?bqNPjmy*;{2e+UIbFst;-r`Q zfD@tvU15<5>=8b*i`7|FWB%~A7Aas<{p6GDp4=dq=^;7aG7g#e?sFk>C7p*gl zaM>iyjzUAvB9zs>NkIh9EfF{HH`1=zZ_?RvqoI`8*Aifr{qR*C!cKNGzv_m30-frU zt-gPS^DXP`Ua#r7vR?`>XSoQXDMBci%}GTy1Y{|3h#3(tpct|VBTYzZUeGji9W5;* zyizy$n7ZnaMfXAJcJmL5I8Us9(0Hw@L5) z$ltZAXlg*vG+O+QgE}!?=26l%9P+#7F&ZYhYAow2{Pj^#jgg%Ryhqwhw}mL0SRuR@h8q>Q3EDP#%mxqbg@T_L%7!(>=xmRI z_}?E$efwv<^I*9bShp-vO?#iEn$#zIwOf+qb?44q3WBgAfATRW3P==YvD=6FcHV!L z`1l7)8S>=H6;?^+VTALqe~i#qZs#}L8Q4Cu&=<>~4~pbN992|-B0Ew`BEV0?xA7Ng z9~sY5Uwv);AWTn+eFzHq3ZjH2`=w#UwkXPJ?esxIk$8I^>mNl(0K51k%4f9j=h_R9pgmmZ@HA3g zM~e}_I7nBlVLJ#pL1_R1;b7rtHb}H3drXon&Xu09msx#xEgjj?oGk)XTp18tL2~5Q zvR_$VoOJHY!4%%asy}QuS)xqm+WSeI%pK0Xys5byGW1|0KGM_H2OG5t>6;a4a&CH#XJ=x>( zI7jfI*u=Q$c+;OjPLdLlUUv99dqCH0-KGM@TaB=~gNUcimshjb2i`8#O~{2QW97WY zm^^(_Y@d$Q16c+iAPnpy4MrOz4V)?y>9X@)K$H&?m~d@6$AhnX=kANF`~sq&pD-Q? z2K`GyMc>uVacM3*lMDnuzX`6ycj&?lnywSuczTe7qfWPt8U=hXv#S;a;FZeazU;5y zXudC~{>9r_Rq+{=pIcvDaJ?$Pbfa5S? zsSDW4bg|Qc@SevJo2vHtIBASAt#FKK{DHaUy$>eoA`vF)5##30jQJt>mZm5$&g+ZU z_NB*rtIoB5X<2v^?R-)+8oJd7VD$EZQs1{KOs9un)y!K17zO>8ejS?@lF1fM?~cwk z2At)&PIqEgJkoA`r3F+rvLfS1Vnf3nc}@U0k{Ga-(|fHI`%QF!e|l%=V#WPNXUK2o z&c_k|(z0U}vd@cP>3c7*v!W?GZq8pp76c?&(Qj+}t|sccv3h(B4E*xD4Q!?Fp7(qz zd*}O4fax2yr{a*4;=m~*y#grhpROT5aNW2lBTc+J&PO5k6?Pj8Vb=abiFSK8*p3Ui z2?G6Ci%s0ScQLO7!zm&b9S=G5 zUC{)f_9?~9JdkH<>&9=H8r(*K#egTD$`X;h9^cdA8LN^leelHmxkLDT`iR!|9N~8{ zF@2%JZ!4RU?74$UZ>�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 literal 11194 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

!`#+!jL+T=i^?hOt-X+~Q<$Tu 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 Uwz3FreL$v$76u=$-h1|c0J=e~mH+?% diff --git a/app/src/main/jniLibs/arm64-v8a/libonnxruntime.so b/app/src/main/jniLibs/arm64-v8a/libonnxruntime.so index 9b1bab7..b73c766 100644 --- a/app/src/main/jniLibs/arm64-v8a/libonnxruntime.so +++ b/app/src/main/jniLibs/arm64-v8a/libonnxruntime.so @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c7c0e6b0f9c364a4df4bfc9a3a3576b691899e96f4d9beb60f3b3a7ce4bf572c -size 15988232 +oid sha256:4d2318b3849abb8862133d3068fc7e807ed8b2671cc6d83657fff2fcb9e1caad +size 25831632 diff --git a/app/src/main/jniLibs/arm64-v8a/libsherpa-onnx-c-api.so b/app/src/main/jniLibs/arm64-v8a/libsherpa-onnx-c-api.so index 51befae..f0e2bc7 100644 --- a/app/src/main/jniLibs/arm64-v8a/libsherpa-onnx-c-api.so +++ b/app/src/main/jniLibs/arm64-v8a/libsherpa-onnx-c-api.so @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:136c16ef29ba19d8681a811027c7d7bdc3a427e2df156e00e3cf624c133149cb -size 4705424 +oid sha256:ec09f16e2e5043898d4dd18ec5c316310a39b7ca74ce4db0a33a3b945790e2ab +size 4327992 diff --git a/app/src/main/jniLibs/arm64-v8a/libsherpa-onnx-cxx-api.so b/app/src/main/jniLibs/arm64-v8a/libsherpa-onnx-cxx-api.so index 3716399..e5fe060 100644 --- a/app/src/main/jniLibs/arm64-v8a/libsherpa-onnx-cxx-api.so +++ b/app/src/main/jniLibs/arm64-v8a/libsherpa-onnx-cxx-api.so @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:659d75245e369c79bd2ec03614ef4a15bf6043e51d1d0484ec4e581aee538bcf -size 410976 +oid sha256:e330684b081ded3d3d694df44abce6de313ccee82e119121d2ea342e5ce0e3d2 +size 419800 diff --git a/app/src/main/jniLibs/arm64-v8a/libsherpa-onnx-jni.so b/app/src/main/jniLibs/arm64-v8a/libsherpa-onnx-jni.so index da28dd6..d6b73c6 100644 --- a/app/src/main/jniLibs/arm64-v8a/libsherpa-onnx-jni.so +++ b/app/src/main/jniLibs/arm64-v8a/libsherpa-onnx-jni.so @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5d120ad84111b2799b6425369b847ca1bea0a9b911659d26eeef2244e66b7267 -size 5008104 +oid sha256:fc072f201dc1923ee98b594eb61c796b538ef087f7f18d08dcfdf0565167a8bd +size 4623192 diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml index 5662308..57b0262 100644 --- a/app/src/main/res/drawable/ic_launcher_background.xml +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -1,8 +1,11 @@ - + + android:type="radial" + android:startColor="#1F1640" + android:endColor="#15102A" + android:centerX="0.5" + android:centerY="0.5" + android:gradientRadius="60dp"/> diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml index 0ae698f..7ca731f 100644 --- a/app/src/main/res/drawable/ic_launcher_foreground.xml +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -1,19 +1,90 @@ - - - + android:viewportWidth="4057" + android:viewportHeight="4057"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_monochrome.xml b/app/src/main/res/drawable/ic_launcher_monochrome.xml new file mode 100644 index 0000000..c632528 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_monochrome.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/logo_hearo_pilot_3.png b/app/src/main/res/drawable/logo_hearo_pilot_3.png deleted file mode 100644 index 91137ec01575b40a9a552dcf891eef65e47b8d21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23343 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 - + android:viewportWidth="4057" + android:viewportHeight="4057"> + + + + - - - - - + android:pivotX="3438" + android:pivotY="3438" + android:scaleX="1.2" + android:scaleY="1.2"> + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml index bbd3e02..80faec8 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -2,4 +2,5 @@ - \ No newline at end of file + + diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml index bbd3e02..04091bd 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -2,4 +2,5 @@ + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/app/src/main/res/mipmap-hdpi/ic_launcher.webp index d45f8d6ee11591a46ffc5225363d63d48cb14ef7..4e18c961d173d4a072530672dd757f6c59f9b9a9 100644 GIT binary patch literal 898 zcmV-|1AY8bNk&F`0{{S5MM6+kP&iC&0{{RoN5ByPU&1z$Bqu}uQDWk04Lj%<7`Kt6 zsPa#9-*}8&jN3?3R7?41xqm*sn*TF6s3Q_66pDyM{k|bY1lv1-6#WGRS-N$pM>iga zvQ((;69^$_mjR?YQm8ag&1bVdx9xpZbsF|9`T1?bc`N*EpX%AnH$Vaq0t7<5CDlFn zkAMskWZO;~iJ6(1nZs$unf)(lr1zgB&tJg*5&efCNp9R`7h3=q@NFj)pYS)6e}KRK zL+Snp__so$V}jpiMp~5?%=u1|8I@JC_vQX6_~i~QSyWiT><1-`R#nhS^xg?Yixy=v zGn|jT3}WF>ltgfGf;n%L#DD=X%LEg|c_kzU+>MALi3)o!?$1DX#}*bO@+I8pgxMtB zqajQYnfhWCI8O;igBD*Hg?f=r*E&EmX}qK(U+99+cnQHXelfFv_|T(W8sLcs$qOf+Yy znPfUx5}6DMv8quQY{-IyoPi{>@Tizmb73SxT9{;?sLKRBL2R+;%8+f=M~|oh)uY*i znLV08(GYQhL&OOj97N=7^drfg?JVpG{EWM`nn61?wqjLw0#$#=* z$E<0>;^~)8$1H@1x+9DMh#?alHWO=(dcf)fRJTAVY&D=Bky-}8trP2m$+`0e;2x?Q zJGL8hj{#_$&rKePCA%@}h&<^N8}*2ls2jVs9XGqN7%LIJF)`_wXhU?~>?H$H*H`W{ ze&ufef`c?nG$KUjWNGsvV8YkywSZ;R<<_uoU1BT;)avUK9&oX_bcPK8om`l={dOyX zpri32AGZ(*wA%agwm=8X$mDzyAqR~O4%pz>k;jyTJsZP!A-2Z{`}@4##{+FuikFg!0AKC@w~~N*7g(jKmQy9jWM!Mu*%gx}z_F zv&E{v|BL+lU&-%r+A8@y{;$6evl)LM^!&Y2^Y>HF-*Y|xUrPSpP2~N*o5=our|JK% zp8bHD{fVCalA8USp8cen{jHw;wwnFFp6d}c*GFou*VJ4;s=1z3bA7GmdSA`?gPQXY YHRm&G&Wp61Uuii{(|o?C=Dg7X026Jt#Q*>R literal 938 zcmV;b16BM|Nk&GZ0{{S5MM6+kP&iDM0{{RoN5ByfF9tV~B-u)GBjdk)h@ky*XG?g` z2)B_WyUM)xzlAWdNQNv)kN~uLyxV~sNs=PT7mn$BGBD{c55AbM!f9;VuCneYXOOf3 zDz=c?q8ltWI}~+bGgocfHq2_L@D2b00Re%2SoEL<0RaI8G@uFr<*EN$Kvoe+k|fwN zVJFXG!hK|f1WAx2NRT`xNfIPGS>ZWBk|fw6AVG5SY!_B#hu`a1mFvji44#wg$PSYv z6M|KlaDbi_vceRXksX2wWGW~3;f#q4gNQOTZfbU8ONKy%kIwpHl6&PFB_JP)Hl<* zm9FaQwankbbK~)SJX&b0pF-mHe}>#_>|`#sZM(LaT0yPY-d<|AsqbprZLI(7ZuUBp zTC?Ac=>G&rKi=&=bE#UOPvW#sQJr!R*)f<}BM`b6e z*Sm~dswb=^JDShx#V(`FW%rSflAyA>z>A^hwiTWANtqL){*E=B?Kxfy`iHg(PVsY3 z$r*kgd?y@ink=Tzo+Ot02CttC+GYe01kI}FuXAn)LBxs{{(ubuVOwN+ZZLBRCW+<_ z_S#x4qqZ@(J2k7y61BNW+Zij3AiBJ2WpxEQ61s`0UC{(UPK}a=d>sKIDi~_bCMNUu z(CsfGCes?(S?X;Hu_X=W8rQ@V(_V|%NhId|(pPUgP_L<_C7J%jd<-)c0TciN;?q?G z5NiL;tSt1Tv*>(Q7LYGK=WC;RezAG1R0PlkCKVw$kj`%-D@dUT$XHoc*^WwWRb~K1 zoXpHJA2admnq{-v+ITZwi`i+*GF7xsrq-sKN^4>VJE91nD{PV#wifFM5MC}bgz`wD zn^G?;Zknbe;ag>&O|NZxiV0C?gkno~{7O&=jJu(7-7nH*QfE^+X0614}g~J6Afuk)dW+N0E-%5Ga zEw3TCX>iMHh_Lz78Kmn*jpo!+##EHEc6fHONoSl)0K#-OPtFe4A}{~|+f)|%aRBHGm2Jm!3cs@h zsC42nW@ZSLGl#>_!D)#`BliAgH^VI&ORnb>6)Pl~vG-TJFauU6v7(%Xjx}ERnfZlb zVzQtg<9^&4&-^ID`~nm2k2PadPsU?!md6J`EN`)RvNF<$LOGpESnP3kduMk`B9$%| zCOVLxN-mr6ayw`4?ZqLJ%}ph*gK1JMeRwJrCmK1q>T&Wt(}yLRBx)Va-i{bxY-IzdEe& ue|3F1_QH&Wu%9SKH4Ap%Cwq|l0AxYMed7(%eQhkxG}!+8@4x?kRT%(*XfhrE literal 1350 zcmV-M1-bfCNk&FK1pok7MM6+kP&iC71pojqp+G1Q&jvS=Btc3|fQX6}`0v|4aGh>I zXe7yzl(PoS@rUOBr-M->Nm6nTju#s6Zwnuk>qxRyr4J6j9sv0h4}{<@_t}Y}3Unff zpa1{?5yU1S!X{z^JQJuq13Wt*67j$D_ZJbK2@HXV4V#EC5Evj4@b{k}HW^F?5J4mY zo*fWD5MlV=*)Z84HVMQ3PEg=~2Y&w&1o`_9OaNfAjUX_DX96&RO+bVp5dc62*hB;o z1Ob=?0VPY8ELqx8UBVJ^Emi3*A&*j*s-$EYm+>uija$l6l~N;QT>totxTTSOsUu3U zL@BrAk!7qpOO$e%Yj$zCRo3`6@@m#m8F^f4w0Fpi{tkKlMz{`-(BHPrkX+T&iEZ09j^pFx zIJRxusvZZ+S?|WSwKiw^?^zW3tNk&lFQWewK)(3@bB-&Eo?cH2mHNGw@t20uu0JiR ztXJ5@cVdE!KNx$b*sdq!-M(xw(RlS%q5kZ*Np2<=lit}{bG=VsD&l*WzA`f`rY5Fm zYO3tMkE!c>Sf-=wD5iE)rhZ-pnCkdiGm$42Qy-s1bP`Tw&cv`js?wQL6RUI)PG`== zupT0*%*hzh!V~7~n>u)9ISgOJmmOeE$4uzTqL}le!oWRb5F%`uJ`jBQkhwA#jEOG5 z-dJ*uEuJx?d)t=ndJLPj?4%s)16+0jlX!8}*k-h@EhetLD8VGyV7+A$*A1lA+w>he z0{gb1h}dB8CJE*(SV`i}OleH9!GM3ZonzH;+u!{gP;BzkIdMr)<++9J??>3Km5Ny0s{#E>fj?=3UQ0!k z0^}DkuK`6|p}=yA*kHbZ06<>81Fa|`?oePmMZ{JI_&fkvd~+xwHaMiffd&*2=kOVT zynLgpHB{kX4Wsxx0Qva_Rl{8h?8NGW_yPcx@=dB?jRLD{n8a5KP>63q4gV|fUk&s5 zLI9=lo$gv~vI3K;bvw=Fgfr zeaeqNeE(go|JHJT?(qIo_c4Lb04fr}`8(zPqZaYG096KM9qY}}_n53;B|s)tmN_!M zQ5_mhILc(l5s2?dGiLLYo=qvD={a>XlYbASVoRPe=G3ljyH7C{txq7?SCvrriVc#v z1!0k#0BGCny$@hWaLjw9k5RkxL z76m{k44lafI1V!j_^&O8;d7$FCl0$wbQno-RBA*ECYX4K$ z(P-p`H4&@c;k- diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp index f1e214e35cc1724d0abc6508c9041db236b62a14..320209f042b957dc41b108588dd55ccb7892283b 100644 GIT binary patch literal 928 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 literal 868 zcmV-q1DpI(Nk&Fo0{{S5MM6+kP&iCb0{{RoYrq;1f8@4pBuUad?wT9LP^&JKfMkX2V zj))k*xI4lCA|k}usqgq*L)@J^xdXTpAtD)+{~Zf3gvjLV1i%1>B1lNclO^yVFY+g0 z`Js?KEk#@YW`x50TZOc(HS*?|LnCH|rD(Y(pSFZmEk$G3)|wn*|HB+b_I7NKhU7(F zed+ps^mQJ^_xXK4uWR1VC3O0{MIr6l_OxxRbj-}WwH-4vGc#`vGjo~2sq>?=Ns3;5 z?$P@yqW=@%EJEI!m@Q`Fk&wYerfA92m_L%Ab_Fp%>g#E~k#wbEeNI2^=8P+S#v08` zrroaENv#Y_QJ2ktKKv>vXpJVk5-EwE7EFm0MWX{t%32K!kh;M^aFbICk+HzqX;Ru6 zSWQxV7}WfXj92IOu3fQm-M$NNWW?qmHC*whI~WGmY#@ge&+oaQLqn9$NBTfX1QBitJqd#g+JZ^?s3AC`Ex+>=H@Ez&n8=l#Ian z<)7qyTz**~10~M)cJoeG@{TQU`QlI_TsM}oGqO(O(wkgiC?THr%NSZ&*BLH*&lA+Z zHHLUs)@_DpG!Wsr$Pll}x`K#?CjuqG^OzwXlXVmkAM?baWO#mUVrXP-L^Qv6GEj;< z^r3Hk@1Ks>4-#HP;k(JUscDV2K}-sWupW1N@|o_jvh@d*gb1})aKw+w+uQuolJKpJL%}P uJsgu~hm51$xq3=Y3az7Mf3y%4iQ2IRN8hdSMlq9!gbXG!6&i0ji;xEqv7NyH diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp index 881db17a76319381c6061d2136e53d3ecc90725f..57b095cfccd5d41d52bdf6a2e358b77f4e725874 100644 GIT binary patch literal 766 zcmV>wHe86eoUZAMD9ZQHg{Hj|$JaGvs0J%M*4`p-y`lt>K>ZM$7i z=M8^BHqiDr1oMG=->`vuoSF5#hpw_7gpi4`(gDzRcK~1^!+=4bm3E2&T_%CdC2P5R z6M(zBB(zK%rb^aqpf0R|rXWI$1AOf5y01{YaPYq_?5K6To%!Sb40m4&4sah#R z3nVH}45+9>u(Dx-)S=zV-Hr^wN`?s{z0)NrJrpY{6U6pJLTC*cf)(-roQU>@kOr=^ z5zO+yFMvGY?%Gw-xk;;W9B&p#`4I->H;&nPv8G6|*g|LGk>C9Oe18e^pPR^usw8*d zHuZ~KV(kBX;ZxWb4k9lUOD+<1cLg{%IWNvX5)O!c;Qj;n#G!lsaehIhW=l4Wc6r** z^N}A?yuZ!5zke`(Pp76!Wvi)XU#&ftr>6ucUYE!5iuVr*l%7^EYhtoSeGa>XGX}-& z#+JtY%=lO?%8icC z++~FIS)QQJ#L`Q~&#r~n+lkQ$k`3%ASVOK>pUojJ%i~KgYKWY6A%+-eP+8dvVdlkL zNEB8>!K#ym`A4Hp?u98qOR?s-NVWM-ShE~-VqBPXMLx1 wn4a++RFUG@-r10F#~{-?p2$cQGyEqg79s}yhbT3e!~y>~l4T(z7=|RBIRN2z%>V!Z literal 1760 zcmV<61|RuSNk&H41^@t8MM6+kP&iD?1^@srFTe{B^-%i%+sy5(+6eYq*S^z^ZQI63 zZ@?YdcoUtqGk30W$F^-N$=*+LUcsu3Ydf{=Hm6LPQy;DR=o+b;=OfFuZPihB>63DI z!HLUr?hCng_Q8JBg|vgF%h|TgkgRuY+Z!@c?2UFKBeZSXJhpB7jLoXAYVdPf&TVbS z=GeCFnaW0I+qTu&`~kM7p4d*t{iiy%llOfO14)w7%y2;5ki3CQ3Q*KxqiDib(PsS~ zyjvIzfLcW1zoG$F(PCd^y+-aYzde!M>jpf*zQwDNYwjPvPb(EQq@E?Bd`uJyQt=jl zc|H&C+3Sf<{<%L|s$57UElViNsR#*MDwSSkCW`$eZ;;S7H&k}yKNo^dR-R)H5F`iiQ$-aikqBym_&SPlEy041I+w>N}5i5_F)1W%}xlwrcq1^O$d3updJl$ET#}tXlrV;z@e_KzZhA69j34j&=YOF># zjF2vc&hTq?0*Qm3lxDEgmvJ_pov=jrn#onqoS0=22fY>n{H~FxU{uZVI%Ll5bZ;Fg zvNt;0ew!vXcWAVz9M10cO@1cP>vKh$9!rR zqLB24xZ&aoXB{STQ?pvFyoVT_a8j0usU4PyQbJ+a#l5~Cy>>X~;2;RezZ%+kYjT!p zpL4`T8OzmA$<4GD&XVmbY7On2NFu2R6)oRp|2!4RU^QB!82}^Y^$(5xs7tU?x*wTt zBo%k{{Rsf3JerGto%&G+ktmm?0wj_|>XA^~*wf3te+z#cm?3M4A_*0MypX81 zN-<+v;Kr{qa{+*!RX^z`a)?r@fTDa;Is5X)NL~cTF#zmcr@4?cI;l9T?^gggF>Kyy z28Y!?vkm66DcJrdkyoLTkfAgEo%Qo*K_4ib+RVWOfSI+tJykieM>Kj&#OP#><;7fc zVHoEDt(pKhSlz3AB!ko=_J|ZcE3Nv`(STv2P4h@K0Parr=D0E&6J=|q-9EbxfJgQJ z=6MPLT>w0-=E(tyi!7ZG@`I;YVpR{10PyPbN{NZ>l|BHtS@W|w^yWV@F-&DbI#JLY z|5(%G`6@k38v(^S17>;eD{=d;7o$ie6Vo1L*#&}=mTI2fbR@X4QaE__J*wb z>5o)I$b zbw$Dqw>61R)%F@$RXka3_|FNy16Yj~Y`i)!daG0YH2{VH7=QlY*VW&_R?&W?^hFqN Co^S2| diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp index 4bb04719a95563edf401d50a326713087b2974e6..3b59b9624eba700afeaad07b6b695222fca816be 100644 GIT binary patch literal 1372 zcmV-i1*7^>Nk&Fg1pok7MM6+kP&iCS1pojqU%(dtXXCh$Bt^;v{|#O3i@9>?&IX5V zBq>r!mw%-2%rIu$Mv|gB&Ob_q*Wy9V{}~+Q3=D!G7yttxgfa*$&&c3t|3NAXNW%7Q z2>Ul6Ig-W~s8NLOygUD&=~<9SK(pTFR{}t!?I#j+{9k}{m=rapM+*WSdR6$mb1e1lPF}ba-X>$l=P&p)aK#YC{DnODy0}6P(eP-b0h|mNA7*h6C zMg@U1fgxp2G%koFuV9QTdun3>A>4C`pfV;XyTFjZ2orN~q#inEyDG!v(2J%zbr!bR%21ZPm$1O^03G#(eA8DyI( z;{>=tj|+hzWh2->C$Gc=i3lDa63bpsv<=532d9^_6o~y(8X%(63p_fgirfE%2AXqG z<)S79P&crm5jL2JT_b^TF*YQnK}-@hL_Ywo)P#VnAsQseMG0z}U@BCU0uh0W637t& zSsfZ9QBIPWqoS^`7>7xfcYK?Kiq)9OggUwY#02vJ%bH+H6&e#Hhsk*oG75tM6+sYv zle?IdnLR^bf1nA3JwchYc|!`oeiI`^;~To9d6l4{czD$r`)&4%8Le{n2Ui~w2a^0E z3~~l>u3&a0FrxfqW@dz3DVSa1u1FkGmb8fsb0N6$!?}?8LNw&Ch4X{Y~Af1X(aaB;nK4E-M;~2wp#T+ z1U!l_hkMQZWznfKSbzoGU3R~y1aG4)=7nx4Bzq&+whhIev4Pi~|{4dQ?6=neXfE?r3Xm z@wSfc-oAw=AIlXzEPuSdIXcka*W1<6)>3Hkj;`Lm{(;e3uOiTthsTS;!{Xz#9!SgE zLqHx1*Iq8jxk>TmBzxN6%VJ(l@_wP>he>kX4Zbht{z87haY5T}Q25KCUb7)D>aXj& z87_#|wb<`nU%UG)qF?gceeSn;Xz=y!+BLb~Qw?h|{c3Tsf3c|VSG5CM-s8gK0n2q< zh#A+G)Z^O65mS$AOX_h=GcJR1Uo|e5Z<%UbCgZ+(Tt3xSe16fW>*f`&bn^QXymTzXSnRwsdR|Rt<`MJi%LTJ5k@M>Kb%EW# za<3Y(E~wtSa=#wAF34eBV`fq78n0XYx+eW~S>o%;|6pD0>96aP-#UnTi{q4f8) zlHZq0eqS;DebMCib(7zhPJdrL`E!Bf&oz=imr4FyDfx4;cw+qP|& zS($(_nyi%RQ>RKsW2>@_>-(~C+eVT&S2?ro{y?s6TgUd?hHd}V|95|B+qO~qk5Son zXWLF^T!3x!#q+)ANjl>#W4p7Rw|lyvvU3GrnQ^M*8v~9500g6#*0!2MeO@P??}_I(;`z14sJWWg&*3rFJN|R2 zy);RlkBH|$EC3OK4JITBBhtSt?osPpseZF03*!kQ`jQU&A);Rk9Mnw+>vQ6)r(E}_ z6A>$}3!-l#`uD7m5lr9G{)OoEw4~8CV?D)7rsf0@`}Hi*?M2kx9OA1aCH z=n=C&TRI?~gVgR%;eOTRZpr{4L)&c&5j|{5=nqeSr{ayP1Aq$6wyahqw1W2X?Cx+QZXd$p!jjggFqnZhD!ch;CXy)XVS9tE>o5s%eAZC#;M6v1OeLd+yDv z+Cb3D2u7{yXU#Maan&Rmm$n`R)G7_m4U5EGZCGZiu~SP21b4DL0?;1Ex!$<6Q7C!bgT<h@Pg zp<33q0>ci^3%ZWNt)J(FN2?Z_Zk(cd!q^kdv4j7wqi{?5;YeT@zfrsmi=6uThFw|z zQ++x7+CCgZ@xH?7*ghy>oi`4M_ucoelzJRo1%e@z2A`{x#yyxBk|5|osNac7Y0As9 zL=(svwUl}vU0pChZqlKBq||luXaN8sN#6-9?)#W~>wltsj#T|-%$?mJP~;j^{I8b| zW5|VOn7b=mjN$Z~F?Q?EmsdAMTsuL*xU_MZ1J3leE(lB@T`>HFb>Nw51huXopmB*g zk$6$x1)M7nP0`uq$)$5bV9}PTjqsb z0RU8#Q#f@1knnmb0K`r)mW~{Em(q9zZ`}eD(tLyPZf8}J_vb(1@lfNe1^@$>kpn@`JZ6mSY z?LY7#B9OH4@85Z>B1v|#`*I}n9US0a1vq#T-cxX70~CeTAC+K+f`^5HLV!j_fCh1b zupky>7!VGGg$6+o0S*Bf1%yF?LItsuIUx9K!F}*sLP4OQKoF1tF?+CJ!F_pgY3qKNmhOWocVk&-XoF8AKm#&H6AmQU=pxmBe7``0MBBF0HVU;Jr_9W4m=lMo z%*;&w|Bp!IB$aG=*!M;BAA%&wZJS;|IR_g&Kp)U7E4Ke^|JnYtEjKu|H0l+_J4#c7 zvf^5D0Kk+OQw{(imz+#H*bIw64mQ(r+IQ%zi?Hs{g=EC52NL*Jz$-Ui0T1~PJP%)6 z+kAOU%sJ@;=6X2V14lIH116nj?Q1?J3P1ZF{3t#qYbI@zKGq69Z{TOe$7a%;eERfo zvsve+$ES}eQ40z$M|C>nMQQa`nUTWZOBKYQB11P70B2U@sZ2zW6nFo~aIY|@B_^lB z^bU{ryA7*vVUdVt++w&Miv}7Ms($l%T9lun{r9$&~A|8u|L%{&T(O5juJX$D~D=)_q zwzYfkzFDuf5{)!E5hBr6sRJD86 z5n!KKWsZdkLC;#JZ3=VENusUY3{G3ho+M86hJYUXQc%8%0MS9927iS)W}9fRH2eZU zxKryYk|f1WKLzlI+u8FNR6MtlB)dv#-}^*E3eWm-XYQee^?i~AjsO71s%*Eq$!F+q z!?(XjHw$JSMJU3DR zL&OliZQxJ=A)&iR)ZjZb;;uC?8#5F_<`Pi@k-I|$Zv}V}WLJn6Km|KwltM%uWX#;S z{eJ}tBS|u2Z`-*n?gTrI1uGIJcGT(fZq$j=G&ok30tY9UsW6aR|}Fly!tvb{Bu7gu;V?EG zlFZGgMsQ3Mek{SGiCQeQl&xCA35zpAp=u>OTjEQK7Kv>9Hxz|fVGI^Ow8b$=rDja- zofO7x`$o%*O=9PU+m|Yet5oL3C}FlNh;-dpT~Ea@nHjU$#@~}9g!W!zcW+w;KN!P= zs0h9;I4V{JaH(S~muKMB6qd&Hhc&thW1Elx=c{7G*QgJz_pC8~ZsQy{WWN~eZU_Rq zc$Bw}yR0l+4_c_!;pgsbqt#pn?=GU%H3X*_CAKB#HWbs8k*W($A+1g4J&{|%_1#Il@~jP3~16M>BGh9NaMJ6R06KO1ZCr&0N?B2=3#$Y7&YQpvkx z2qga75^(fL*k(|3RR})Tw6u~z+y%qxF?tED$YCuRooncP(|C&kfGtZYRNf-Mw8P@J z4evC;X90j72waP^QUxIJ=s0)}jfI*6c#J-^S_gnm7@jCaZNgWbQImu;Nw~&$x1tmR zKqrF8V(q@?SYs<{zSlU5vvl#)5WCw2WvL>?}S-R~SWrvv~qvRRv(vty}l z&vwuZ0F4;M+nOmeM<<}c_Sk}qPJ4m^P?s|T&K^q-G`jUT9YAY>J*O-i;5knCiEHQw z0J)9H!F#a6C!YYcqBt*mp^ET*5f6#aVjgk|&{Iag_5Wj~<5ERH2O2V}(|1v1e(hd7 zSxmn!1A3wuVdV)^R0m2Zg^mAH<%O712LQk#vpRF?2mpwm;))iUs~BjA8jIKG znplARMsEXtOmIg5qXRk+r2Df`V_wu~cEnU#N`WSn)AkRnBn3w9GKSX=`TX|%SeBkQl>|$#lqb;ysV1XT zmnjzQ61v(ILuGtCNQh*tVBZReW7m|$YL-|f&4ek$&=55t@xkhxW0j-+XP+rQh34u) zNW3Flt9<_PKtE1|?bRJjd7-(Afkv~SnAr}z?>U~q<@+!2N?jfZSJgABvV13c<&E)0%N1w2W(BIr*d(j5qPDCC?&IX5V zBq>r!mw%-2%rIu$Mv|gB&Ob_q*Wy9V{}~+Q3=D!G7yttxgfa*$&&c3t|3NAXNW%7Q z2>Ul6Ig-W~s8NLOygUD&=~<9SK(pTFR{}t!?I#j+{9k}{m=rapMphjteDaqMTgBy}4Lvd%r z9L(S%OG>5`XI%)%U?Qzsb@R|cS&|E#u792%&c^kOPbRop&3hR zZm~31g`(=IAqpvFE1t|19iu@^TV{zUs;(GJL}qS46uX9qNnVUKTyKOX)nTCvn&kRZ zih?axEo4qx3}$F47AHlo5+PD_6hqBro??lp>?0KQM+`-<4~Qv-x};H1zex~b$t6p% zeU{)!e0bHF`VIVILA%`j!PSQ(1xx=V40;uKt_EBQia0-603hN@_^x;wN`R$m-o64y z0=e_Uxl!c40xnyIk}EJ&)ItQ8^a(-4Z`49`4MlEBZKa=n28M!6DFPH7n!MZ66srsM z%Zq>x#V@A51FydWVB!}+yHnuBXQ`~o#n7hp`Jui3ri(T~L8j2U*+LLBDZKmU;NC;e zNHH{XdQope8+~FgaJt)}APf%hY0;Z4fC`Sz={68=6e%@@4hFStLvWi7_oLHjcp-wx@Q0zNHaV1@cQ?-7{l?K@AeHdZl>6;^ zNCl@DzTG`@HNg#@Q^!3 zC+6=I$?=;5I<|DI*wOm*n1L^Vl=Hkrs)a2O6&_Hd# zN5&?nre_v!y^267FOQEaFUKEO>xGQGJtx?6;o3`r#6#*Y_p=Y1eOXU6B=sk%f7nm1 zyV>{k`Cz(}J&e&s@{z zJ=3xlGq2W-yJcFd`Ld?2$!o041T!499J7HeeEbFqc?wi)-<}H}k zWwP$u*JW$R=NG-MZC~-qwyywQ^vpfE0;%ae>%IuqeGy>Z7v+`T*G2D3_Y^oBu`k_I zU{CD6GdQ6YN`ifL7IiMb{VVs{5$A&Ty({+}A(FOgOBzDnLt_l2@b-q(`hyA`}Im-pL!MO5y-D5;87vHQ9P zx}#F}rSty0uZ{{m7cf?Ll>A&np*c%_E+aA`%XzMplI|$`xfo?+miSyxV0@PITrwfu zeYeEts!Sy?OM5O{FkPm9uFaWHqmzS>BzV2K~)9;QPP8?d_S-ba(ml-^|Q7W@ef)LvZa+ z%(!tl*$G1*gUT3YPOrj@<}JB8jJ@G>n7PBWbzsVKN`h_MYTMkh43Wdk9J4L9=;OO( z))YF94qei%ZH6ShW81cEW9wPepY1xM3?(Xi*-L*pHP~F|# z*?_xia(8!khmqg={LX&^6Pb!b;t*XD)#1h6ty!8xnk9TJ!6ki(`ol?@90nQ-AaSS; z1OO~zRm&~caJHRsnQ$ZkAlSsVZBDlF0Nbd!_BytsZA`XpBm7bS9k`98NXfx6Uv=LX zc!Pt0O5wjschRX#9lPBkZsuIWD3=^Y>?J>+6ptzow%Wf)f+zBkdL+<$a?3L!?mgF_lV` z1w>g!locy(-;pR&Hu>Yfp8t=fJ!UQ@-_K|f*tPq8(w#`ti1Ip71`=f{QG!TNibS9h zl~P|?Lnz?QFZ)&Cl}G5|_uTK3I`N4n5#>|*D6@Rc7!sihl5)irciu@9#OIxXEd*RI z{HypxlO8{{zvz1OMKoMPX#W~Q(Ni;b-dU0emubp=d8aQa#TWiGnoiMU7N4jQkuDKs zp;moCS<^_9k>>kGedjC3GWUwG7hztn5+?eXI!u&BTHSd?-AoG;SKMjTtKa%B=3c0? zbIc@iI*E+e>WVu}D7^Cuqkcsn@zHdTie_km;z83(+y-*CD%B1e z#YDh28bzKxf^xGVl-vAxBK^>1X(C}+D)Q`S&DjlnTYA{~`QJz)yz~`)6A}AYC~|S{ z35LzwYth_IKt~jw`i&++zEKHLysTxLk$WvIgidAF@Zx)8izWn_$WKHKTnp=TnFZ-V z12r;{gcK4E*GC^`+?8)h*lu0=7I7gGA%mFL2#cGg{6DnL;Hph);L9f3KH zwQ5WMYycP})1#!@ijurgNRsfh=QRMjD3EV*iD}w|@8r4r%TYUXlJB0|k61`>)T5}q2mh00IrVfzdQ%sTr)R<=uz(^w@Z2_1+Zj~cAp{2rAF zVFz{i=B<6Jk8Et{cpja^n^A;BQiW%5YxBvBo3>>A4N0g#5jhE84^Z6}IuwVAWF0dB zsHLrq6E3?Q{wZ?p=}@7QH??3WH`_$d$g}f)8wI1s8~q@gxxzZ)JX91dQK)ygwfTD1 zYx2w*%3YsGc`Aq5yIwv_Id8s+uz*g=?$}N$k<3iH2U=_m8RFF$GDK zMEE$IT7NX-h6&G`)M!a~xF01VdTZY;7*92xaz#yCJTh~)kuGd>yf%FkE0S=R7B-4n zF*vhXGh7oWvc@^>vtxr0t#g7l zrNoJn`_#??J8H5p`4O1f?F=OgEVWI#87jbt7B&KB-8d)f1r^VQcBoRqGj6aniA9Lu zp%Nwid+03ii%It$9wJd$#8eiV)Sss5AN<7HrvGq2C<*|q=VEtcl7^)Lvdsnn1C5iv z+QJ{WymB6@VwMIfum3+`vCSNVuJn+_;YepQ`UC)16jPo6c;S?vGKd!}jS+AJ%oBK2 z#dSFCZ)B-p=>GY)OgWCnB=%>4>`vXv_#c4GT^|_^(zL=Sf=qMRPmMx{A_Gol;e#dG zm5h&pl(t8Bd`aRWu^cvm|19={{xyfCid@O?k?jGxq$pbpVO8YHA@U z3QgWTooPY9@&>>){-WyruZ~FowRKHf5>X<7u=$Y|#0!@IJnb)?7=P~;K*w5DwUa^c z{9FrCxDyBy_g}kr0Srxjhm2Hj-**mT{3X39`DB&^ytE%$;H`ZF@LE^S z==H;PK@2}Uu1zkHXr9{qH0-VlQDy<)OaNNB1!agtCHr^tRPDC5UMLS)gh+c^EZKFT}v)0L%%HPWymL zX8~wE<+~R`UL7S6@*m4qgCW6y_39sj=8m3j9#bNzN7`BMa{#)P1v4X3xEZ%L?Nubg z)u&%^!=*_aLP$qlwp0No^QJm!QgL0_02F?rbO|?(T2yxufE+m2js+mrvhEp5=3H|c zs`-vBBAPnJRSMF3`_=@RM3mg7pt>eZ2;;MyB>+TB2Km6b34pIYfA2(+%$GWsJ#}AJ zqX@OtAYNb1vjX+myi}*YEk<W0DPb-0B`_oo*Va-g4)p+vW?3A zDT$u65waN453<5$hYG>il{Oeat^3}>Q^b9x0Knw7_8TgfyEm-X57)s?i`2i?+Sp~& zcNOy^1A$0H_ylT6^AiB3$2b6dG6}!5($;y(^krZ-HiH!xT{MZSttRpOQ&JxMw#D`6 z<26`c=b0eJX8%_I5~@uMVmSb5;PO^WvPz1Py_e=WwJo}#B)w4&+ws2CtxV~a(+eE| zNGmx=++Ps@*xknV%t+s>orkKDc0G98QW8>bt|cw+0XVMbI$)B{129^vs<~rWWC2yq9CzqenXT* zm@uqG(Z#c0#0~He0R8as^{$?aWvM()$hBLWa)u5r_PreUZ-hpeym|p}xAVd4BuSJp zLP{heY!ue2>cNR0&bSdZ0Mqd4wVs|0XRAC;ty>v#hmI}{crC8)i`)04o=Y>~4`SFY!6O%Ol0t`2_c9k>AyfHRW(potZTY0y(;|14q6J*%Gsr&cD zG-su7G3c0dNjTA-a%1%Q)24r8_liE_W?V$L-VC6To%g@FgGg#T=B6KKt!qC0rq9ITz%#cP!dD;tWoN@jwuegt;kOAu@V4f2|^IFpS z{I-KhxGU;}bXav={^k{%yf9-qCfMDs|2Kd(cGmq%*+5{x5*e*S+FC-&!fN80>cd zXb7NPEvkL#X&-buf|9nir#z@GOWpuzzt>H(zO`5|+-|$>G;5lD+HD;*UEW>x`5Upd z&N8KjP=F-{1e@yvXfYhD>20lQ-g~VJ^P7=yHMCCp)Xh>?IbkizKMn5 zV<^U)bpUA4+g1lalcmCVg;^6MS;Y$}DcOn20UrZ)L+8C^KV6?O0!f6$t>%{ewb=JD_owFH9K2Nw9Zqr(C zHht7npZe51_x+BV-b`zq&K%-wMv`9jl?u@9w1sDVqrI4!G%&fZz3T@r`g{dwHx#TJ zFn;@NqqQt~>?Ga(Ze`5%w3jSVLKspaK?kVPdEw&_CJfK`iCddWHMQ>eg1dAFj0BBtS+EsuqBikp&e8n37J5!CSU)0jJe|FIy=$4u| zx74S*jWye=t$E##yQLxBEj4j=F%VcwJN{MUn&;LylxVU}PVp7+Ofi(M}_AUt5o3XXly6XczcfI;6yR<(v+fa*%lqE^0v*@$aNs=r) GjR61}q=Ov* diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp index c7cb7b7c344ac8a3bd4555fc7c2835b59a452c11..8723190dad6c2b83fed83a52df6bea93f6c30a0c 100644 GIT binary patch literal 1818 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 QBxGhP3(J%s)qzq90C_Ye$p8QV diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp index f1d6ee847a1954381d20398aeacb9f8c9a214927..31b6e6e716f001a1e92f3000103ed32ffd0d6937 100644 GIT binary patch literal 1336 zcmV-81;_eQNk&F61pok7MM6+kP&iB^1pojqL%~oGH^iWkBt^CR=-=+~g9nCf+eV^u z@BZ`N#Rk&0$?jkC%b>OuDgWcX!X(fr_D?Z3fCOJ{+6GM88s9ORaKT_$FkysY#ef4V zMi@2_BMuM-199L0VIYWrVTFM(Y*;a1zy@N(jSGZ>qkI5`&yK=6_$^@({8=&zLP0SA zDhDF~MFucOs)X>1gwP`j>Wd;{Wh)2Aa4^dw+R%d*sC){Neq;gz_S9F2g!(VQ?jv~( zja>^~A=T18M8(1V)o;)aQ7+v$3IY~_tbcCYQy?NHK<6RCeFTyKuxXnzGlWxcxnAG7 zk0$Xf%H|L_|Ik zd=e>qq34`H$3{6vMI>0nA5-(a_HoeeWIE>x=Retj!k;L15z9w>T~2tm>{=FpRf)JKB!U&)OIz6*W_vI7N>xPcE@)LtnKVh%a-|n` z<%4%p)TZoWj&?0YyOLuUO@ZQBARG?nOCeTiE0rXfvOHQ8OY=vPVQ;E}5EWvTMhO7M zO%bJnsXd|acRM-IA5zdN(#}|l1I9B}(@+TMADF!L#ex5DF+4OFp_g_$%}_Ctp{E&b zY81(OvBsvv8=f+D=?mpU`?Ib4(CoEf*7n}bTx-_$ zb2pxB_L#wGEB2VDfqc$7wilZ{>sZ_t(V1Iyxw$j9rK*(9epj10`(5?qbO*84_#MQW zsP4j!8@&r#6V{#VaU*xKM#6$?b#ntObt(>sXH?d->a{ySl1i^SoTHL^Wmf8dY*uPn zLq&6?2rN04D|K+pN)a}*S6$RKZLyQ(?CAs&;hY^c6pFyMbGf4tI6F$)4D)G;ECL{T z+SziLRXf|mSxta)mOhxPpiB~&b2FDdFlRk%JLLVR{$3*z%_fmTJuDw04g&hckTG++$74L-UBI+i3|8(i!M1*%_y*c!ctUA}# zX27mCA72Q}&L5qDI;Fn5^1HA@RrQ}1rlX0+)Y(iIM*zeRCWGY3&Z|n|FQqrf9yZ@AN!B}$9*FVyN1dD literal 3516 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 KyY%tO{yq%vOSb6% literal 5920 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�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 literal 2946 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 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp index d84893d0e5dc1439866725ca78e172149352eb54..3b958297fdc0f2489d4c45c38888e2dfb432b5d8 100644 GIT binary patch literal 1792 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 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp index 38feb170a09c27e23b3045dc595117e2b7478d61..510c6285089611fe7c8faa60e7b141f6e1f85569 100644 GIT binary patch literal 2490 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 E2KJKLJpcdz literal 8472 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... reasoning blocks emitted by hybrid thinking models - * (e.g. Qwen3.5) before parsing the JSON payload. + * Strip reasoning/thinking blocks before parsing the JSON payload. * - * NOTE: this is a *defensive fallback* only. The primary suppression happens at - * the C++ layer in ai_chat.cpp (processUserPrompt) by pre-filling an empty think - * block so the model never generates reasoning tokens in the first place. - * If that workaround is ever removed or a future model bypasses it, this strip - * prevents the raw block from surfacing as insight content. + * Supported formats: + * - Qwen3.5: ... + * - Gemma 4: <|channel>thought\n...\n * - * This must NOT be treated as the main solution: reasoning tokens still consume - * the token budget even when stripped here, degrading the quality of the JSON - * that follows them. + * NOTE: this is a *defensive fallback* only. The primary suppression for Qwen3.5 + * happens at the C++ layer in ai_chat.cpp by pre-filling an empty think block. + * Gemma 4 thinking is stripped here because its Jinja2 template inserts <|think|> + * automatically; a C++ suppression equivalent is not yet implemented. + * + * Reasoning tokens still consume the token budget even when stripped here, + * degrading the quality of the JSON that follows them. */ fun stripThinkingBlock(text: String): String { - val start = text.indexOf("") - if (start == -1) return text - val end = text.indexOf("", startIndex = start) - if (end == -1) { - // Unclosed think block (model was cut off mid-reasoning): discard everything. - return text.substring(0, start).trim() + // Qwen3.5: ... + val qwenStart = text.indexOf("") + if (qwenStart != -1) { + val qwenEnd = text.indexOf("", startIndex = qwenStart) + return if (qwenEnd == -1) { + text.substring(0, qwenStart).trim() + } else { + (text.substring(0, qwenStart) + text.substring(qwenEnd + "".length)).trim() + } + } + // Gemma 4: <|channel>thought\n...\n + val gemmaStart = text.indexOf("<|channel>thought") + if (gemmaStart != -1) { + val gemmaEnd = text.indexOf("", startIndex = gemmaStart) + return if (gemmaEnd == -1) { + text.substring(0, gemmaStart).trim() + } else { + (text.substring(0, gemmaStart) + text.substring(gemmaEnd + "".length)).trim() + } } - return (text.substring(0, start) + text.substring(end + "".length)).trim() + return text } /** diff --git a/lib-llama-android/src/main/cpp/CMakeLists.txt b/lib-llama-android/src/main/cpp/CMakeLists.txt index 034a699..5cd4e68 100644 --- a/lib-llama-android/src/main/cpp/CMakeLists.txt +++ b/lib-llama-android/src/main/cpp/CMakeLists.txt @@ -45,12 +45,15 @@ target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${LLAMA_SRC} ${LLAMA_SRC}/common + ${LLAMA_SRC}/vendor ${LLAMA_SRC}/include ${LLAMA_SRC}/ggml/include ${LLAMA_SRC}/ggml/src) target_link_libraries(${CMAKE_PROJECT_NAME} llama - common + # The common utils library was renamed from `common` to `llama-common` + # upstream (llama.cpp ~b9xxx); it transitively pulls in llama-common-base. + llama-common android log) diff --git a/lib-llama-android/src/main/cpp/ai_chat.cpp b/lib-llama-android/src/main/cpp/ai_chat.cpp index feb68d8..1cc4725 100644 --- a/lib-llama-android/src/main/cpp/ai_chat.cpp +++ b/lib-llama-android/src/main/cpp/ai_chat.cpp @@ -49,6 +49,13 @@ static common_sampler * g_sampler; // cannot rewind the recurrent memory state to an earlier position. static bool g_model_has_mrope = false; +// Whether the loaded model's chat template should emit extended thinking tokens. +// Set to false for models whose template supports enable_thinking (currently Gemma 4) +// so the Jinja template omits <|think|> from the system turn and automatically +// appends the thinking-suppression prefix in the generation prompt. +// For all other models the parameter is a no-op in their template. +static bool g_model_enable_thinking = true; + extern "C" JNIEXPORT void JNICALL Java_com_arm_aichat_internal_InferenceEngineImpl_init(JNIEnv *env, jobject /*unused*/, jstring nativeLibDir) { @@ -176,6 +183,15 @@ Java_com_arm_aichat_internal_InferenceEngineImpl_prepare(JNIEnv * /*env*/, jobje g_model_has_mrope = (rope_type == LLAMA_ROPE_TYPE_MROPE || rope_type == LLAMA_ROPE_TYPE_IMROPE); LOGi("prepare: rope_type=%d has_mrope=%s", (int) rope_type, g_model_has_mrope ? "true" : "false"); + // Detect models whose chat template supports enable_thinking (currently Gemma 4). + // For these models we disable thinking via enable_thinking=false so the Jinja template + // suppresses reasoning tokens automatically, keeping the full output budget for JSON. + char arch_buf[32] = {}; + const int arch_len = llama_model_meta_val_str(g_model, "general.architecture", arch_buf, sizeof(arch_buf)); + const std::string arch_str = (arch_len > 0) ? std::string(arch_buf) : ""; + g_model_enable_thinking = (arch_str != "gemma4"); + LOGi("prepare: arch=%s enable_thinking=%s", arch_buf, g_model_enable_thinking ? "true" : "false"); + return 0; } @@ -346,11 +362,33 @@ static void shift_context() { } static std::string chat_add_and_format(const std::string &role, const std::string &content) { - common_chat_msg new_msg; - new_msg.role = role; - new_msg.content = content; - auto formatted = common_chat_format_single( - g_chat_templates.get(), chat_msgs, new_msg, role == ROLE_USER, /* use_jinja */ false); + common_chat_msg new_msg{role, content}; + + // Use common_chat_templates_apply directly (rather than common_chat_format_single) so we + // can pass enable_thinking. For most models the parameter is a no-op in their template; + // for Gemma 4 it makes the Jinja template omit <|think|> from the system turn and + // automatically append the thinking-suppression prefix in the generation prompt. + common_chat_templates_inputs inputs; + inputs.use_jinja = true; + inputs.enable_thinking = g_model_enable_thinking; + + // Compute the already-formatted prefix to extract only the new message diff. + std::string fmt_past; + if (!chat_msgs.empty()) { + inputs.messages = chat_msgs; + inputs.add_generation_prompt = false; + fmt_past = common_chat_templates_apply(g_chat_templates.get(), inputs).prompt; + } + + inputs.messages = chat_msgs; + inputs.messages.push_back(new_msg); + inputs.add_generation_prompt = (role == ROLE_USER); + const auto fmt_new = common_chat_templates_apply(g_chat_templates.get(), inputs).prompt; + + const auto diff = fmt_new.substr(fmt_past.size()); + // Preserve leading newline when past text ends with '\n' (mirrors common_chat_format_single). + const auto formatted = (!fmt_past.empty() && fmt_past.back() == '\n') ? "\n" + diff : diff; + chat_msgs.push_back(new_msg); LOGi("%s: Formatted and added %s message: \n%s\n", __func__, role.c_str(), formatted.c_str()); return formatted; @@ -551,12 +589,8 @@ Java_com_arm_aichat_internal_InferenceEngineImpl_processUserPrompt( // support / default to thinking mode. Standard attention-only models // (Gemma3 → NEOX=2, Llama → NORM=0) are unaffected. // - // TODO / future consideration: if a future model uses M-RoPE but does NOT - // have thinking mode (or if thinking mode becomes desirable for long-form - // analysis tasks where quality matters more than token budget), this block - // should be gated on a separate g_model_has_thinking flag detected at - // prepare() time rather than reusing g_model_has_mrope. For now the two - // properties are perfectly correlated for every model we support. + // Note: Gemma 4 also has thinking mode but uses a different token format + // (<|channel>thought ... ) and is handled in the block below. // // Upstream reference: llama.cpp --reasoning off / enable_thinking=false in // the Jinja chat template (models/templates/Qwen-Qwen3-0.6B.jinja:82-84). @@ -568,6 +602,11 @@ Java_com_arm_aichat_internal_InferenceEngineImpl_processUserPrompt( __func__); } + // For models with enable_thinking support (e.g. Gemma 4) the suppression is handled + // transparently in chat_add_and_format via g_model_enable_thinking=false, which + // makes the Jinja template append the thinking-suppression prefix automatically. + // No additional step is needed here. + // Decode formatted user prompts auto user_tokens = common_tokenize(g_context, formatted_user_prompt, has_chat_template, has_chat_template); for (auto id: user_tokens) { diff --git a/lib-llama-android/src/main/jniLibs/arm64-v8a/libggml-base.so b/lib-llama-android/src/main/jniLibs/arm64-v8a/libggml-base.so index 9c36ebe..1a81ae1 100644 --- a/lib-llama-android/src/main/jniLibs/arm64-v8a/libggml-base.so +++ b/lib-llama-android/src/main/jniLibs/arm64-v8a/libggml-base.so @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:16ab986b45411ec94337947b26f3ab8b73d1b79c0dc2471e9923a27dc100ded1 -size 6976240 +oid sha256:c094f42bb4f086c026bf45f0d0e32cb708c5baafaa07fbe114f058eb12052edd +size 6978512 diff --git a/lib-llama-android/src/main/jniLibs/arm64-v8a/libggml-cpu-android_armv8.0_1.so b/lib-llama-android/src/main/jniLibs/arm64-v8a/libggml-cpu-android_armv8.0_1.so index d8dd1e4..a68cb89 100644 --- a/lib-llama-android/src/main/jniLibs/arm64-v8a/libggml-cpu-android_armv8.0_1.so +++ b/lib-llama-android/src/main/jniLibs/arm64-v8a/libggml-cpu-android_armv8.0_1.so @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:30d603bd4fdf90318c6704c2171de244c36edb9c8b4d80f5937d0fd0cb8f8301 -size 7741608 +oid sha256:a903be8fc4644d8e1d44357e03896a543ea8b5515c4fe156627552c49f5150e1 +size 7751768 diff --git a/lib-llama-android/src/main/jniLibs/arm64-v8a/libggml-cpu-android_armv8.2_1.so b/lib-llama-android/src/main/jniLibs/arm64-v8a/libggml-cpu-android_armv8.2_1.so index e42dedb..df329cc 100644 --- a/lib-llama-android/src/main/jniLibs/arm64-v8a/libggml-cpu-android_armv8.2_1.so +++ b/lib-llama-android/src/main/jniLibs/arm64-v8a/libggml-cpu-android_armv8.2_1.so @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8e3689bc616a1bd1a82f16901752abf047e4cb24038df4b925b5389020e45ae1 -size 8062288 +oid sha256:2300e34bdd07ccf3e0bc2fdc05b3c45372c1662d24dabb4695f089308be866fc +size 8072256 diff --git a/lib-llama-android/src/main/jniLibs/arm64-v8a/libggml-cpu-android_armv8.2_2.so b/lib-llama-android/src/main/jniLibs/arm64-v8a/libggml-cpu-android_armv8.2_2.so index 666ec3e..258c7ac 100644 --- a/lib-llama-android/src/main/jniLibs/arm64-v8a/libggml-cpu-android_armv8.2_2.so +++ b/lib-llama-android/src/main/jniLibs/arm64-v8a/libggml-cpu-android_armv8.2_2.so @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:782f850434771bab86258b2dc7d296155746f46fe83f75b3952fd0fb2e40582e -size 8062528 +oid sha256:d5802212d18b0852f3ff9625e1151fd572ebe8046b6dcb0212832f74264a991f +size 8072520 diff --git a/lib-llama-android/src/main/jniLibs/arm64-v8a/libggml-cpu-android_armv8.6_1.so b/lib-llama-android/src/main/jniLibs/arm64-v8a/libggml-cpu-android_armv8.6_1.so index 7e26059..dbdc523 100644 --- a/lib-llama-android/src/main/jniLibs/arm64-v8a/libggml-cpu-android_armv8.6_1.so +++ b/lib-llama-android/src/main/jniLibs/arm64-v8a/libggml-cpu-android_armv8.6_1.so @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d9309193af4b5602fa6d379aa78f9f9f365ca948ec7bc13e79180b2507e5b863 -size 8209544 +oid sha256:796f723f57a215155be113c187a1cfadd481764b59727b07bbdb0180df45ba24 +size 8219696 diff --git a/lib-llama-android/src/main/jniLibs/arm64-v8a/libggml-cpu-android_armv9.0_1.so b/lib-llama-android/src/main/jniLibs/arm64-v8a/libggml-cpu-android_armv9.0_1.so index 437385c..cbbb580 100644 --- a/lib-llama-android/src/main/jniLibs/arm64-v8a/libggml-cpu-android_armv9.0_1.so +++ b/lib-llama-android/src/main/jniLibs/arm64-v8a/libggml-cpu-android_armv9.0_1.so @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:70cd960ee4fe1854c6cca8b46962f17960adb05523afa10b399ba4022755821e -size 8314856 +oid sha256:655240b1b96b306c29d798af7c3c4bddea3d39273a470818a45440ade93c68fc +size 8325296 diff --git a/lib-llama-android/src/main/jniLibs/arm64-v8a/libggml-cpu-android_armv9.2_1.so b/lib-llama-android/src/main/jniLibs/arm64-v8a/libggml-cpu-android_armv9.2_1.so index f3f7dcc..28966d4 100644 --- a/lib-llama-android/src/main/jniLibs/arm64-v8a/libggml-cpu-android_armv9.2_1.so +++ b/lib-llama-android/src/main/jniLibs/arm64-v8a/libggml-cpu-android_armv9.2_1.so @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:63f58a4b4f5367deffa671c2d5a73690c978a82a6dd453f6c6e3f7bc20f9abf8 -size 8444488 +oid sha256:7968f97f16ef6d93a3fe87aa2398c7556a6c64d363adc78fdd4f362f1c79a756 +size 8454824 diff --git a/lib-llama-android/src/main/jniLibs/arm64-v8a/libggml-cpu-android_armv9.2_2.so b/lib-llama-android/src/main/jniLibs/arm64-v8a/libggml-cpu-android_armv9.2_2.so index fba0dcd..57214fe 100644 --- a/lib-llama-android/src/main/jniLibs/arm64-v8a/libggml-cpu-android_armv9.2_2.so +++ b/lib-llama-android/src/main/jniLibs/arm64-v8a/libggml-cpu-android_armv9.2_2.so @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9f6eefe932e4bf9b66f934d243fe934524f6fdc511c98225e4047bdae31bbcb8 -size 8444512 +oid sha256:482d329b970fd2813d314f7d7808e87e3b233ba6551fc10216dbbb4252fd1b66 +size 8454864 diff --git a/lib-llama-android/src/main/jniLibs/arm64-v8a/libggml.so b/lib-llama-android/src/main/jniLibs/arm64-v8a/libggml.so index 72c862f..b5e19f3 100644 --- a/lib-llama-android/src/main/jniLibs/arm64-v8a/libggml.so +++ b/lib-llama-android/src/main/jniLibs/arm64-v8a/libggml.so @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c32b0ad54c7ce2ded6b79ae4fd2a1698204a8c56b6b45818fbef97ff3b642cf7 +oid sha256:0565045a23fe71d6b526aed27412cfabc798f60779e67677bc3b41d1f7038d46 size 1729496 diff --git a/lib-llama-android/src/main/jniLibs/arm64-v8a/libkleidiai.so b/lib-llama-android/src/main/jniLibs/arm64-v8a/libkleidiai.so index 234fd71..e86de97 100644 --- a/lib-llama-android/src/main/jniLibs/arm64-v8a/libkleidiai.so +++ b/lib-llama-android/src/main/jniLibs/arm64-v8a/libkleidiai.so @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a197970e768b5f99279dc5cdbe9bcdd97b8d1626927ee29857d6a3e87f52c5da -size 1921976 +oid sha256:c0c59c7d365d0b196123ec1d983bcc79c5cb21fccd2e0ffa2dd1b22802d2e3b8 +size 2129240 diff --git a/lib-llama-android/src/main/jniLibs/arm64-v8a/libllama.so b/lib-llama-android/src/main/jniLibs/arm64-v8a/libllama.so index 2e3c305..62df76f 100644 --- a/lib-llama-android/src/main/jniLibs/arm64-v8a/libllama.so +++ b/lib-llama-android/src/main/jniLibs/arm64-v8a/libllama.so @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:34c3a24bd59271bdddc098716877b86dfb005908b55da14cb094860f0789ae61 -size 34988376 +oid sha256:aa9a7fa378d22de5f7efaa2593eb8fd78f65a473272a18727c159ab8da0d5318 +size 35588960 diff --git a/lib-sherpa-onnx/src/main/java/com/k2fsa/sherpa/onnx/OfflineRecognizer.kt b/lib-sherpa-onnx/src/main/java/com/k2fsa/sherpa/onnx/OfflineRecognizer.kt index 826b61c..1488768 100644 --- a/lib-sherpa-onnx/src/main/java/com/k2fsa/sherpa/onnx/OfflineRecognizer.kt +++ b/lib-sherpa-onnx/src/main/java/com/k2fsa/sherpa/onnx/OfflineRecognizer.kt @@ -50,6 +50,10 @@ data class OfflineMedAsrCtcModelConfig( var model: String = "", ) +data class OfflineFireRedAsrCtcModelConfig( + var model: String = "", +) + data class OfflineFunAsrNanoModelConfig( var encoderAdaptor: String = "", var llm: String = "", @@ -66,6 +70,19 @@ data class OfflineFunAsrNanoModelConfig( var hotwords: String = "", ) +data class OfflineQwen3AsrModelConfig( + var convFrontend: String = "", + var encoder: String = "", + var decoder: String = "", + var tokenizer: String = "", + var maxTotalLen: Int = 512, + var maxNewTokens: Int = 128, + var temperature: Float = 1e-6f, + var topP: Float = 0.8f, + var seed: Int = 42, + var hotwords: String = "", +) + data class OfflineWhisperModelConfig( var encoder: String = "", var decoder: String = "", @@ -84,11 +101,23 @@ data class OfflineCanaryModelConfig( var usePnc: Boolean = true, ) +data class OfflineCohereTranscribeModelConfig( + var encoder: String = "", + var decoder: String = "", + var language: String = "", + var usePunct: Boolean = true, + var useItn: Boolean = true, +) + data class OfflineFireRedAsrModelConfig( var encoder: String = "", var decoder: String = "", ) +// For moonshine v1, you need four models. +// For moonshine v2, you need two models. +// - v1: preprocessor, encoder, uncachedDecoder, cachedDecoder +// - v2: encoder, mergedDecoder data class OfflineMoonshineModelConfig( var preprocessor: String = "", var encoder: String = "", @@ -97,10 +126,6 @@ data class OfflineMoonshineModelConfig( var mergedDecoder: String = "", ) -data class OfflineFireRedAsrCtcModelConfig( - var model: String = "", -) - data class OfflineSenseVoiceModelConfig( var model: String = "", var language: String = "", @@ -122,8 +147,11 @@ data class OfflineModelConfig( var omnilingual: OfflineOmnilingualAsrCtcModelConfig = OfflineOmnilingualAsrCtcModelConfig(), var medasr: OfflineMedAsrCtcModelConfig = OfflineMedAsrCtcModelConfig(), var funasrNano: OfflineFunAsrNanoModelConfig = OfflineFunAsrNanoModelConfig(), + var qwen3Asr: OfflineQwen3AsrModelConfig = OfflineQwen3AsrModelConfig(), var fireRedAsrCtc: OfflineFireRedAsrCtcModelConfig = OfflineFireRedAsrCtcModelConfig(), var canary: OfflineCanaryModelConfig = OfflineCanaryModelConfig(), + var cohereTranscribe: OfflineCohereTranscribeModelConfig = + OfflineCohereTranscribeModelConfig(), var teleSpeech: String = "", var numThreads: Int = 1, var debug: Boolean = false, @@ -176,6 +204,11 @@ class OfflineRecognizer( return OfflineStream(p) } + fun createStream(hotwords: String): OfflineStream { + val p = createStreamWithHotwords(ptr, hotwords) + return OfflineStream(p) + } + fun getResult(stream: OfflineStream): OfflineRecognizerResult { return getResult(stream.ptr) } @@ -188,6 +221,8 @@ class OfflineRecognizer( private external fun createStream(ptr: Long): Long + private external fun createStreamWithHotwords(ptr: Long, hotwords: String): Long + private external fun setConfig(ptr: Long, config: OfflineRecognizerConfig) private external fun newFromAsset( @@ -787,6 +822,187 @@ fun getOfflineModelConfig(type: Int): OfflineModelConfig? { tokenizer = "$modelDir/Qwen3-0.6B", ), tokens = "", + numThreads=3, + ) + } + + 47 -> { + val modelDir = "sherpa-onnx-wenetspeech-wu-u2pp-conformer-ctc-zh-int8-2026-02-03" + return OfflineModelConfig( + wenetCtc = OfflineWenetCtcModelConfig( + model = "$modelDir/model.int8.onnx", + ), + tokens = "$modelDir/tokens.txt", + ) + } + + 48 -> { + val modelDir = "sherpa-onnx-wenetspeech-wu-u2pp-conformer-ctc-zh-2026-02-03" + return OfflineModelConfig( + wenetCtc = OfflineWenetCtcModelConfig( + model = "$modelDir/model.onnx", + ), + tokens = "$modelDir/tokens.txt", + ) + } + + 49 -> { + val modelDir = "sherpa-onnx-zipformer-vi-30M-int8-2026-02-09" + return OfflineModelConfig( + transducer = OfflineTransducerModelConfig( + encoder = "$modelDir/encoder.int8.onnx", + decoder = "$modelDir/decoder.onnx", + joiner = "$modelDir/joiner.int8.onnx", + ), + tokens = "$modelDir/tokens.txt", + modelType = "transducer", + ) + } + + 50 -> { + val modelDir = "sherpa-onnx-fire-red-asr2-ctc-zh_en-int8-2026-02-25" + return OfflineModelConfig( + fireRedAsrCtc = OfflineFireRedAsrCtcModelConfig( + model = "$modelDir/model.int8.onnx", + ), + tokens = "$modelDir/tokens.txt", + ) + } + + 51 -> { + val modelDir = "sherpa-onnx-moonshine-tiny-ko-quantized-2026-02-27" + return OfflineModelConfig( + moonshine = OfflineMoonshineModelConfig( + encoder = "$modelDir/encoder_model.ort", + mergedDecoder = "$modelDir/decoder_model_merged.ort", + ), + tokens = "$modelDir/tokens.txt", + ) + } + + 52 -> { + val modelDir = "sherpa-onnx-moonshine-tiny-ja-quantized-2026-02-27" + return OfflineModelConfig( + moonshine = OfflineMoonshineModelConfig( + encoder = "$modelDir/encoder_model.ort", + mergedDecoder = "$modelDir/decoder_model_merged.ort", + ), + tokens = "$modelDir/tokens.txt", + ) + } + + 53 -> { + val modelDir = "sherpa-onnx-moonshine-tiny-en-quantized-2026-02-27" + return OfflineModelConfig( + moonshine = OfflineMoonshineModelConfig( + encoder = "$modelDir/encoder_model.ort", + mergedDecoder = "$modelDir/decoder_model_merged.ort", + ), + tokens = "$modelDir/tokens.txt", + ) + } + + 54 -> { + val modelDir = "sherpa-onnx-moonshine-base-zh-quantized-2026-02-27" + return OfflineModelConfig( + moonshine = OfflineMoonshineModelConfig( + encoder = "$modelDir/encoder_model.ort", + mergedDecoder = "$modelDir/decoder_model_merged.ort", + ), + tokens = "$modelDir/tokens.txt", + ) + } + + 55 -> { + val modelDir = "sherpa-onnx-moonshine-base-vi-quantized-2026-02-27" + return OfflineModelConfig( + moonshine = OfflineMoonshineModelConfig( + encoder = "$modelDir/encoder_model.ort", + mergedDecoder = "$modelDir/decoder_model_merged.ort", + ), + tokens = "$modelDir/tokens.txt", + ) + } + + 56 -> { + val modelDir = "sherpa-onnx-moonshine-base-uk-quantized-2026-02-27" + return OfflineModelConfig( + moonshine = OfflineMoonshineModelConfig( + encoder = "$modelDir/encoder_model.ort", + mergedDecoder = "$modelDir/decoder_model_merged.ort", + ), + tokens = "$modelDir/tokens.txt", + ) + } + + 57 -> { + val modelDir = "sherpa-onnx-moonshine-base-ja-quantized-2026-02-27" + return OfflineModelConfig( + moonshine = OfflineMoonshineModelConfig( + encoder = "$modelDir/encoder_model.ort", + mergedDecoder = "$modelDir/decoder_model_merged.ort", + ), + tokens = "$modelDir/tokens.txt", + ) + } + + 58 -> { + val modelDir = "sherpa-onnx-moonshine-base-es-quantized-2026-02-27" + return OfflineModelConfig( + moonshine = OfflineMoonshineModelConfig( + encoder = "$modelDir/encoder_model.ort", + mergedDecoder = "$modelDir/decoder_model_merged.ort", + ), + tokens = "$modelDir/tokens.txt", + ) + } + + 59 -> { + val modelDir = "sherpa-onnx-moonshine-base-en-quantized-2026-02-27" + return OfflineModelConfig( + moonshine = OfflineMoonshineModelConfig( + encoder = "$modelDir/encoder_model.ort", + mergedDecoder = "$modelDir/decoder_model_merged.ort", + ), + tokens = "$modelDir/tokens.txt", + ) + } + + 60 -> { + val modelDir = "sherpa-onnx-moonshine-base-ar-quantized-2026-02-27" + return OfflineModelConfig( + moonshine = OfflineMoonshineModelConfig( + encoder = "$modelDir/encoder_model.ort", + mergedDecoder = "$modelDir/decoder_model_merged.ort", + ), + tokens = "$modelDir/tokens.txt", + ) + } + + 61 -> { + val modelDir = "sherpa-onnx-qwen3-asr-0.6B-int8-2026-03-25" + return OfflineModelConfig( + qwen3Asr = OfflineQwen3AsrModelConfig( + convFrontend = "$modelDir/conv_frontend.onnx", + encoder = "$modelDir/encoder.int8.onnx", + decoder = "$modelDir/decoder.int8.onnx", + tokenizer = "$modelDir/tokenizer", + ), + tokens = "", + numThreads=3, + ) + } + + 62 -> { + val modelDir = "sherpa-onnx-nemo-parakeet-unified-en-0.6b-int8-non-streaming" + return OfflineModelConfig( + transducer = OfflineTransducerModelConfig( + encoder = "$modelDir/encoder.int8.onnx", + decoder = "$modelDir/decoder.int8.onnx", + joiner = "$modelDir/joiner.int8.onnx", + ), + tokens = "$modelDir/tokens.txt", + modelType = "nemo_transducer", ) } diff --git a/lib-sherpa-onnx/src/main/java/com/k2fsa/sherpa/onnx/OfflineStream.kt b/lib-sherpa-onnx/src/main/java/com/k2fsa/sherpa/onnx/OfflineStream.kt index ab316c5..96393a7 100644 --- a/lib-sherpa-onnx/src/main/java/com/k2fsa/sherpa/onnx/OfflineStream.kt +++ b/lib-sherpa-onnx/src/main/java/com/k2fsa/sherpa/onnx/OfflineStream.kt @@ -4,6 +4,10 @@ class OfflineStream(var ptr: Long) { fun acceptWaveform(samples: FloatArray, sampleRate: Int) = acceptWaveform(ptr, samples, sampleRate) + fun setOption(key: String, value: String) = setOption(ptr, key, value) + + fun getOption(key: String): String = getOption(ptr, key) + protected fun finalize() { if (ptr != 0L) { delete(ptr) @@ -22,6 +26,8 @@ class OfflineStream(var ptr: Long) { } private external fun acceptWaveform(ptr: Long, samples: FloatArray, sampleRate: Int) + private external fun setOption(ptr: Long, key: String, value: String) + private external fun getOption(ptr: Long, key: String): String private external fun delete(ptr: Long) companion object { diff --git a/lib-sherpa-onnx/src/main/jniLibs/arm64-v8a/libonnxruntime.so b/lib-sherpa-onnx/src/main/jniLibs/arm64-v8a/libonnxruntime.so index 9b1bab7..b73c766 100644 --- a/lib-sherpa-onnx/src/main/jniLibs/arm64-v8a/libonnxruntime.so +++ b/lib-sherpa-onnx/src/main/jniLibs/arm64-v8a/libonnxruntime.so @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c7c0e6b0f9c364a4df4bfc9a3a3576b691899e96f4d9beb60f3b3a7ce4bf572c -size 15988232 +oid sha256:4d2318b3849abb8862133d3068fc7e807ed8b2671cc6d83657fff2fcb9e1caad +size 25831632 diff --git a/lib-sherpa-onnx/src/main/jniLibs/arm64-v8a/libsherpa-onnx-c-api.so b/lib-sherpa-onnx/src/main/jniLibs/arm64-v8a/libsherpa-onnx-c-api.so index 51befae..f0e2bc7 100644 --- a/lib-sherpa-onnx/src/main/jniLibs/arm64-v8a/libsherpa-onnx-c-api.so +++ b/lib-sherpa-onnx/src/main/jniLibs/arm64-v8a/libsherpa-onnx-c-api.so @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:136c16ef29ba19d8681a811027c7d7bdc3a427e2df156e00e3cf624c133149cb -size 4705424 +oid sha256:ec09f16e2e5043898d4dd18ec5c316310a39b7ca74ce4db0a33a3b945790e2ab +size 4327992 diff --git a/lib-sherpa-onnx/src/main/jniLibs/arm64-v8a/libsherpa-onnx-cxx-api.so b/lib-sherpa-onnx/src/main/jniLibs/arm64-v8a/libsherpa-onnx-cxx-api.so index 3716399..e5fe060 100644 --- a/lib-sherpa-onnx/src/main/jniLibs/arm64-v8a/libsherpa-onnx-cxx-api.so +++ b/lib-sherpa-onnx/src/main/jniLibs/arm64-v8a/libsherpa-onnx-cxx-api.so @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:659d75245e369c79bd2ec03614ef4a15bf6043e51d1d0484ec4e581aee538bcf -size 410976 +oid sha256:e330684b081ded3d3d694df44abce6de313ccee82e119121d2ea342e5ce0e3d2 +size 419800 diff --git a/lib-sherpa-onnx/src/main/jniLibs/arm64-v8a/libsherpa-onnx-jni.so b/lib-sherpa-onnx/src/main/jniLibs/arm64-v8a/libsherpa-onnx-jni.so index da28dd6..d6b73c6 100644 --- a/lib-sherpa-onnx/src/main/jniLibs/arm64-v8a/libsherpa-onnx-jni.so +++ b/lib-sherpa-onnx/src/main/jniLibs/arm64-v8a/libsherpa-onnx-jni.so @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5d120ad84111b2799b6425369b847ca1bea0a9b911659d26eeef2244e66b7267 -size 5008104 +oid sha256:fc072f201dc1923ee98b594eb61c796b538ef087f7f18d08dcfdf0565167a8bd +size 4623192