diff --git a/examples/demo-apps/android/LlamaDemo/app/src/main/AndroidManifest.xml b/examples/demo-apps/android/LlamaDemo/app/src/main/AndroidManifest.xml
index 836c7f7f8be..7096a7d4e76 100644
--- a/examples/demo-apps/android/LlamaDemo/app/src/main/AndroidManifest.xml
+++ b/examples/demo-apps/android/LlamaDemo/app/src/main/AndroidManifest.xml
@@ -36,6 +36,30 @@
android:name="libcdsprpc.so"
android:required="false" />
+
+
+
+
+
+
+
+
+
+
+
+
{
+ setupBackendSelectorDialog();
+ });
modelImageButton.setOnClickListener(
view -> {
setupModelSelectorDialog();
@@ -104,6 +113,12 @@ private void setupSettings() {
if (mModelType != null) {
mModelTypeTextView.setText(mModelType.toString());
}
+ mBackendType = mSettingsFields.getBackendType();
+ ETLogging.getInstance().log("mBackendType from settings " + mBackendType);
+ if (mBackendType != null) {
+ mBackendTextView.setText(mBackendType.toString());
+ setBackendSettingMode();
+ }
setupParameterSettings();
setupPromptSettings();
@@ -285,6 +300,29 @@ private void showInvalidPromptDialog() {
.show();
}
+ private void setupBackendSelectorDialog() {
+ // Convert enum to list
+ List backendTypesList = new ArrayList<>();
+ for (BackendType backendType : BackendType.values()) {
+ backendTypesList.add(backendType.toString());
+ }
+ // Alert dialog builder takes in arr of string instead of list
+ String[] backendTypes = backendTypesList.toArray(new String[0]);
+ AlertDialog.Builder backendTypeBuilder = new AlertDialog.Builder(this);
+ backendTypeBuilder.setTitle("Select backend type");
+ backendTypeBuilder.setSingleChoiceItems(
+ backendTypes,
+ -1,
+ (dialog, item) -> {
+ mBackendTextView.setText(backendTypes[item]);
+ mBackendType = BackendType.valueOf(backendTypes[item]);
+ setBackendSettingMode();
+ dialog.dismiss();
+ });
+
+ backendTypeBuilder.create().show();
+ }
+
private void setupModelSelectorDialog() {
String[] pteFiles = listLocalFile("/data/local/tmp/llama/", ".pte");
AlertDialog.Builder modelPathBuilder = new AlertDialog.Builder(this);
@@ -370,6 +408,32 @@ private String getFilenameFromPath(String uriFilePath) {
return "";
}
+ private void setBackendSettingMode() {
+ if (mBackendType.equals(BackendType.XNNPACK) || mBackendType.equals(BackendType.QUALCOMM)) {
+ setXNNPACKSettingMode();
+ } else if (mBackendType.equals(BackendType.MEDIATEK)) {
+ setMediaTekSettingMode();
+ }
+ }
+
+ private void setXNNPACKSettingMode() {
+ requireViewById(R.id.modelLayout).setVisibility(View.VISIBLE);
+ requireViewById(R.id.tokenizerLayout).setVisibility(View.VISIBLE);
+ requireViewById(R.id.parametersView).setVisibility(View.VISIBLE);
+ requireViewById(R.id.temperatureLayout).setVisibility(View.VISIBLE);
+ mModelFilePath = "";
+ mTokenizerFilePath = "";
+ }
+
+ private void setMediaTekSettingMode() {
+ requireViewById(R.id.modelLayout).setVisibility(View.GONE);
+ requireViewById(R.id.tokenizerLayout).setVisibility(View.GONE);
+ requireViewById(R.id.parametersView).setVisibility(View.GONE);
+ requireViewById(R.id.temperatureLayout).setVisibility(View.GONE);
+ mModelFilePath = "/in/mtk/llama/runner";
+ mTokenizerFilePath = "/in/mtk/llama/runner";
+ }
+
private void loadSettings() {
Gson gson = new Gson();
String settingsFieldsJSON = mDemoSharedPreferences.getSettings();
@@ -384,6 +448,7 @@ private void saveSettings() {
mSettingsFields.saveParameters(mSetTemperature);
mSettingsFields.savePrompts(mSystemPrompt, mUserPrompt);
mSettingsFields.saveModelType(mModelType);
+ mSettingsFields.saveBackendType(mBackendType);
mDemoSharedPreferences.addSettings(mSettingsFields);
}
diff --git a/examples/demo-apps/android/LlamaDemo/app/src/main/java/com/example/executorchllamademo/SettingsFields.java b/examples/demo-apps/android/LlamaDemo/app/src/main/java/com/example/executorchllamademo/SettingsFields.java
index b71799981b2..3adadf574da 100644
--- a/examples/demo-apps/android/LlamaDemo/app/src/main/java/com/example/executorchllamademo/SettingsFields.java
+++ b/examples/demo-apps/android/LlamaDemo/app/src/main/java/com/example/executorchllamademo/SettingsFields.java
@@ -30,6 +30,10 @@ public ModelType getModelType() {
return modelType;
}
+ public BackendType getBackendType() {
+ return backendType;
+ }
+
public String getUserPrompt() {
return userPrompt;
}
@@ -63,9 +67,11 @@ public boolean getIsLoadModel() {
private boolean isClearChatHistory;
private boolean isLoadModel;
private ModelType modelType;
+ private BackendType backendType;
public SettingsFields() {
ModelType DEFAULT_MODEL = ModelType.LLAMA_3;
+ BackendType DEFAULT_BACKEND = BackendType.XNNPACK;
modelFilePath = "";
tokenizerFilePath = "";
@@ -75,6 +81,7 @@ public SettingsFields() {
isClearChatHistory = false;
isLoadModel = false;
modelType = DEFAULT_MODEL;
+ backendType = DEFAULT_BACKEND;
}
public SettingsFields(SettingsFields settingsFields) {
@@ -86,6 +93,7 @@ public SettingsFields(SettingsFields settingsFields) {
this.isClearChatHistory = settingsFields.getIsClearChatHistory();
this.isLoadModel = settingsFields.getIsLoadModel();
this.modelType = settingsFields.modelType;
+ this.backendType = settingsFields.backendType;
}
public void saveModelPath(String modelFilePath) {
@@ -100,6 +108,10 @@ public void saveModelType(ModelType modelType) {
this.modelType = modelType;
}
+ public void saveBackendType(BackendType backendType) {
+ this.backendType = backendType;
+ }
+
public void saveParameters(Double temperature) {
this.temperature = temperature;
}
@@ -126,6 +138,7 @@ public boolean equals(SettingsFields anotherSettingsFields) {
&& userPrompt.equals(anotherSettingsFields.userPrompt)
&& isClearChatHistory == anotherSettingsFields.isClearChatHistory
&& isLoadModel == anotherSettingsFields.isLoadModel
- && modelType == anotherSettingsFields.modelType;
+ && modelType == anotherSettingsFields.modelType
+ && backendType == anotherSettingsFields.backendType;
}
}
diff --git a/examples/demo-apps/android/LlamaDemo/app/src/main/res/layout/activity_settings.xml b/examples/demo-apps/android/LlamaDemo/app/src/main/res/layout/activity_settings.xml
index 7d5c3b1b6df..0ec551ae364 100644
--- a/examples/demo-apps/android/LlamaDemo/app/src/main/res/layout/activity_settings.xml
+++ b/examples/demo-apps/android/LlamaDemo/app/src/main/res/layout/activity_settings.xml
@@ -28,11 +28,51 @@
android:translationY="5dp" />
+
+
+
+
+
+
+
+
+
+