Skip to content

lx200916/ChatBotApp

Repository files navigation

mllm Chat Bot is an Android application based on the multimodal LLM inference engine mllm. It supports text/image conversations, Android Intent Invocation, and can support the use of CPU and some Hexagon NPUs.

Note

ChatBot is a demo app of MLLM Engine. Any error report or feature request should be opened in mllm Github Repo.

Supported Functions

Model Backend Chat Intent Invocation
PhoneLM 1.5B CPU ✔️ ✔️
NPU ✔️ ✔️
Qwen-2.5 1.5B CPU ✔️ ✔️
NPU
Qwen-1.5 1.8B CPU ✔️
NPU ✔️
Fuyu 8B CPU ✔️

How to Build

Get the Code

git clone https://github.com/lx200916/ChatBotApp

Build JNI Lib

Get mllm codes:

git clone https://github.com/UbiquitousLearning/mllm
cd mllm

Build mllm_lib:

mkdir ../build-arm-app
cd ../build-arm-app

cmake .. \
-DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \
-DCMAKE_BUILD_TYPE=Release \
-DANDROID_ABI="arm64-v8a" \
-DANDROID_NATIVE_API_LEVEL=android-28  \
-DNATIVE_LIBRARY_OUTPUT=. -DNATIVE_INCLUDE_OUTPUT=. $1 $2 $3 \
-DARM=ON \
-DAPK=ON \
-DQNN=ON \
-DDEBUG=OFF \
-DTEST=OFF \
-DQUANT=OFF \
-DQNN_VALIDATE_NODE=ON \
-DMLLM_BUILD_XNNPACK_BACKEND=OFF

make mllm_lib -j$(nproc)

Copy mllm_lib to ChatBotApp:

cp ./libmllm_lib.a ChatBotApp/app/src/main/cpp/libs/

Download mllm models

You need to download mllm models from Web.

gte-small-fp32.mllm
phonelm-1.5b-instruct-q4_0_4_4.mllm phonelm-1.5b-instruct-int8.mllm
phonelm-1.5b-call-q8_0.mllm phonelm-1.5b-call-int8.mllm
qwen-2.5-1.5b-instruct-q4_0_4_4.mllm
qwen-2.5-1.5b-call-q4_0_4_4.mllm
qwen-1.5-1.8b-chat-q4_0_4_4.mllm qwen-1.5-1.8b-chat-int8.mllm
fuyu-8b-q4_k.mllm

Move models to Phone

Then you need to move these models and vocab files from mllm/vocab to your Android Phone's File Path /sdcard/Download/model/. The following files are required to exist in /sdcard/Download/model/:

/sdcard/Download/model/
|-- gte-small-fp32.mllm
|-- phonelm-1.5b-instruct-int8.mllm
|-- phonelm-1.5b-instruct-q4_0_4_4.mllm 
|-- phonelm-1.5b-call-int8.mllm
|-- phonelm-1.5b-call-q8_0.mllm
|-- qwen-2.5-1.5b-call-q4_0_4_4.mllm
|-- qwen-2.5-1.5b-instruct-q4_0_4_4.mllm
|-- qwen-1.5-1.8b-chat-int8.mllm
|-- qwen-1.5-1.8b-chat-q4_0_4_4.mllm
|-- fuyu-8b-q4_k.mllm 
|-- gte_vocab.mllm
|-- phonelm_vocab.mllm
|-- phonelm_merges.txt   
|-- qwen_vocab.mllm
|-- qwen_merges.txt
|-- qwen2.5_vocab.mllm               
|-- qwen2.5_merges.txt
|-- fuyu_vocab.mllm

Build

Now you can import the project into Android Studio and build it.

If you do not use Android Studio, you may need to manually set up JDK(17+) and Android SDK(30+) environment, and then build it with gradle.

./gradlew assembleDebug