mirror of
				https://github.com/ggml-org/llama.cpp.git
				synced 2025-10-30 08:42:00 +00:00 
			
		
		
		
	This reverts commit efc8f767c8.
			
			
This commit is contained in:
		| @@ -7,6 +7,8 @@ android { | ||||
|     namespace = "com.example.llama" | ||||
|     compileSdk = 34 | ||||
|  | ||||
|     ndkVersion = "26.1.10909125" | ||||
|  | ||||
|     defaultConfig { | ||||
|         applicationId = "com.example.llama" | ||||
|         minSdk = 33 | ||||
| @@ -18,6 +20,17 @@ android { | ||||
|         vectorDrawables { | ||||
|             useSupportLibrary = true | ||||
|         } | ||||
|         ndk { | ||||
|             // Add NDK properties if wanted, e.g. | ||||
|             // abiFilters += listOf("arm64-v8a") | ||||
|         } | ||||
|         externalNativeBuild { | ||||
|             cmake { | ||||
|                 arguments += "-DCMAKE_BUILD_TYPE=Release" | ||||
|                 cppFlags += listOf() | ||||
|                 arguments += listOf() | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     buildTypes { | ||||
| @@ -42,6 +55,17 @@ android { | ||||
|     composeOptions { | ||||
|         kotlinCompilerExtensionVersion = "1.5.1" | ||||
|     } | ||||
|     packaging { | ||||
|         resources { | ||||
|             excludes += "/META-INF/{AL2.0,LGPL2.1}" | ||||
|         } | ||||
|     } | ||||
|     externalNativeBuild { | ||||
|         cmake { | ||||
|             path = file("src/main/cpp/CMakeLists.txt") | ||||
|             version = "3.22.1" | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| dependencies { | ||||
| @@ -54,7 +78,6 @@ dependencies { | ||||
|     implementation("androidx.compose.ui:ui-graphics") | ||||
|     implementation("androidx.compose.ui:ui-tooling-preview") | ||||
|     implementation("androidx.compose.material3:material3") | ||||
|     implementation(project(":llama")) | ||||
|     testImplementation("junit:junit:4.13.2") | ||||
|     androidTestImplementation("androidx.test.ext:junit:1.1.5") | ||||
|     androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") | ||||
|   | ||||
| @@ -37,7 +37,7 @@ FetchContent_MakeAvailable(llama) | ||||
| # used in the AndroidManifest.xml file. | ||||
| add_library(${CMAKE_PROJECT_NAME} SHARED | ||||
|     # List C/C++ source files with relative paths to this CMakeLists.txt. | ||||
|         llama-android.cpp) | ||||
|     llama-android.cpp) | ||||
| 
 | ||||
| # Specifies libraries CMake should link to your target library. You | ||||
| # can link libraries from various origins, such as libraries defined in this | ||||
| @@ -81,7 +81,7 @@ static void log_callback(ggml_log_level level, const char * fmt, void * data) { | ||||
| 
 | ||||
| extern "C" | ||||
| JNIEXPORT jlong JNICALL | ||||
| Java_android_llama_cpp_LLamaAndroid_load_1model(JNIEnv *env, jobject, jstring filename) { | ||||
| Java_com_example_llama_Llm_load_1model(JNIEnv *env, jobject, jstring filename) { | ||||
|     llama_model_params model_params = llama_model_default_params(); | ||||
| 
 | ||||
|     auto path_to_model = env->GetStringUTFChars(filename, 0); | ||||
| @@ -101,13 +101,13 @@ Java_android_llama_cpp_LLamaAndroid_load_1model(JNIEnv *env, jobject, jstring fi | ||||
| 
 | ||||
| extern "C" | ||||
| JNIEXPORT void JNICALL | ||||
| Java_android_llama_cpp_LLamaAndroid_free_1model(JNIEnv *, jobject, jlong model) { | ||||
| Java_com_example_llama_Llm_free_1model(JNIEnv *, jobject, jlong model) { | ||||
|     llama_free_model(reinterpret_cast<llama_model *>(model)); | ||||
| } | ||||
| 
 | ||||
| extern "C" | ||||
| JNIEXPORT jlong JNICALL | ||||
| Java_android_llama_cpp_LLamaAndroid_new_1context(JNIEnv *env, jobject, jlong jmodel) { | ||||
| Java_com_example_llama_Llm_new_1context(JNIEnv *env, jobject, jlong jmodel) { | ||||
|     auto model = reinterpret_cast<llama_model *>(jmodel); | ||||
| 
 | ||||
|     if (!model) { | ||||
| @@ -139,25 +139,25 @@ Java_android_llama_cpp_LLamaAndroid_new_1context(JNIEnv *env, jobject, jlong jmo | ||||
| 
 | ||||
| extern "C" | ||||
| JNIEXPORT void JNICALL | ||||
| Java_android_llama_cpp_LLamaAndroid_free_1context(JNIEnv *, jobject, jlong context) { | ||||
| Java_com_example_llama_Llm_free_1context(JNIEnv *, jobject, jlong context) { | ||||
|     llama_free(reinterpret_cast<llama_context *>(context)); | ||||
| } | ||||
| 
 | ||||
| extern "C" | ||||
| JNIEXPORT void JNICALL | ||||
| Java_android_llama_cpp_LLamaAndroid_backend_1free(JNIEnv *, jobject) { | ||||
| Java_com_example_llama_Llm_backend_1free(JNIEnv *, jobject) { | ||||
|     llama_backend_free(); | ||||
| } | ||||
| 
 | ||||
| extern "C" | ||||
| JNIEXPORT void JNICALL | ||||
| Java_android_llama_cpp_LLamaAndroid_log_1to_1android(JNIEnv *, jobject) { | ||||
| Java_com_example_llama_Llm_log_1to_1android(JNIEnv *, jobject) { | ||||
|     llama_log_set(log_callback, NULL); | ||||
| } | ||||
| 
 | ||||
| extern "C" | ||||
| JNIEXPORT jstring JNICALL | ||||
| Java_android_llama_cpp_LLamaAndroid_bench_1model( | ||||
| Java_com_example_llama_Llm_bench_1model( | ||||
|         JNIEnv *env, | ||||
|         jobject, | ||||
|         jlong context_pointer, | ||||
| @@ -271,13 +271,13 @@ Java_android_llama_cpp_LLamaAndroid_bench_1model( | ||||
| 
 | ||||
| extern "C" | ||||
| JNIEXPORT void JNICALL | ||||
| Java_android_llama_cpp_LLamaAndroid_free_1batch(JNIEnv *, jobject, jlong batch_pointer) { | ||||
| Java_com_example_llama_Llm_free_1batch(JNIEnv *, jobject, jlong batch_pointer) { | ||||
|     llama_batch_free(*reinterpret_cast<llama_batch *>(batch_pointer)); | ||||
| } | ||||
| 
 | ||||
| extern "C" | ||||
| JNIEXPORT jlong JNICALL | ||||
| Java_android_llama_cpp_LLamaAndroid_new_1batch(JNIEnv *, jobject, jint n_tokens, jint embd, jint n_seq_max) { | ||||
| Java_com_example_llama_Llm_new_1batch(JNIEnv *, jobject, jint n_tokens, jint embd, jint n_seq_max) { | ||||
| 
 | ||||
|     // Source: Copy of llama.cpp:llama_batch_init but heap-allocated.
 | ||||
| 
 | ||||
| @@ -313,19 +313,19 @@ Java_android_llama_cpp_LLamaAndroid_new_1batch(JNIEnv *, jobject, jint n_tokens, | ||||
| 
 | ||||
| extern "C" | ||||
| JNIEXPORT void JNICALL | ||||
| Java_android_llama_cpp_LLamaAndroid_backend_1init(JNIEnv *, jobject) { | ||||
| Java_com_example_llama_Llm_backend_1init(JNIEnv *, jobject) { | ||||
|     llama_backend_init(); | ||||
| } | ||||
| 
 | ||||
| extern "C" | ||||
| JNIEXPORT jstring JNICALL | ||||
| Java_android_llama_cpp_LLamaAndroid_system_1info(JNIEnv *env, jobject) { | ||||
| Java_com_example_llama_Llm_system_1info(JNIEnv *env, jobject) { | ||||
|     return env->NewStringUTF(llama_print_system_info()); | ||||
| } | ||||
| 
 | ||||
| extern "C" | ||||
| JNIEXPORT jint JNICALL | ||||
| Java_android_llama_cpp_LLamaAndroid_completion_1init( | ||||
| Java_com_example_llama_Llm_completion_1init( | ||||
|         JNIEnv *env, | ||||
|         jobject, | ||||
|         jlong context_pointer, | ||||
| @@ -376,7 +376,7 @@ Java_android_llama_cpp_LLamaAndroid_completion_1init( | ||||
| 
 | ||||
| extern "C" | ||||
| JNIEXPORT jstring JNICALL | ||||
| Java_android_llama_cpp_LLamaAndroid_completion_1loop( | ||||
| Java_com_example_llama_Llm_completion_1loop( | ||||
|         JNIEnv * env, | ||||
|         jobject, | ||||
|         jlong context_pointer, | ||||
| @@ -438,6 +438,6 @@ Java_android_llama_cpp_LLamaAndroid_completion_1loop( | ||||
| 
 | ||||
| extern "C" | ||||
| JNIEXPORT void JNICALL | ||||
| Java_android_llama_cpp_LLamaAndroid_kv_1cache_1clear(JNIEnv *, jobject, jlong context) { | ||||
| Java_com_example_llama_Llm_kv_1cache_1clear(JNIEnv *, jobject, jlong context) { | ||||
|     llama_kv_cache_clear(reinterpret_cast<llama_context *>(context)); | ||||
| } | ||||
| @@ -1,4 +1,4 @@ | ||||
| package android.llama.cpp | ||||
| package com.example.llama | ||||
| 
 | ||||
| import android.util.Log | ||||
| import kotlinx.coroutines.CoroutineDispatcher | ||||
| @@ -10,7 +10,7 @@ import kotlinx.coroutines.withContext | ||||
| import java.util.concurrent.Executors | ||||
| import kotlin.concurrent.thread | ||||
| 
 | ||||
| class LLamaAndroid { | ||||
| class Llm { | ||||
|     private val tag: String? = this::class.simpleName | ||||
| 
 | ||||
|     private val threadLocalState: ThreadLocal<State> = ThreadLocal.withInitial { State.Idle } | ||||
| @@ -165,8 +165,8 @@ class LLamaAndroid { | ||||
|         } | ||||
| 
 | ||||
|         // Enforce only one instance of Llm. | ||||
|         private val _instance: LLamaAndroid = LLamaAndroid() | ||||
|         private val _instance: Llm = Llm() | ||||
| 
 | ||||
|         fun instance(): LLamaAndroid = _instance | ||||
|         fun instance(): Llm = _instance | ||||
|     } | ||||
| } | ||||
| @@ -1,6 +1,5 @@ | ||||
| package com.example.llama | ||||
|  | ||||
| import android.llama.cpp.LLamaAndroid | ||||
| import android.util.Log | ||||
| import androidx.compose.runtime.getValue | ||||
| import androidx.compose.runtime.mutableStateOf | ||||
| @@ -10,7 +9,7 @@ import androidx.lifecycle.viewModelScope | ||||
| import kotlinx.coroutines.flow.catch | ||||
| import kotlinx.coroutines.launch | ||||
|  | ||||
| class MainViewModel(private val llamaAndroid: LLamaAndroid = LLamaAndroid.instance()): ViewModel() { | ||||
| class MainViewModel(private val llm: Llm = Llm.instance()): ViewModel() { | ||||
|     companion object { | ||||
|         @JvmStatic | ||||
|         private val NanosPerSecond = 1_000_000_000.0 | ||||
| @@ -29,7 +28,7 @@ class MainViewModel(private val llamaAndroid: LLamaAndroid = LLamaAndroid.instan | ||||
|  | ||||
|         viewModelScope.launch { | ||||
|             try { | ||||
|                 llamaAndroid.unload() | ||||
|                 llm.unload() | ||||
|             } catch (exc: IllegalStateException) { | ||||
|                 messages += exc.message!! | ||||
|             } | ||||
| @@ -45,7 +44,7 @@ class MainViewModel(private val llamaAndroid: LLamaAndroid = LLamaAndroid.instan | ||||
|         messages += "" | ||||
|  | ||||
|         viewModelScope.launch { | ||||
|             llamaAndroid.send(text) | ||||
|             llm.send(text) | ||||
|                 .catch { | ||||
|                     Log.e(tag, "send() failed", it) | ||||
|                     messages += it.message!! | ||||
| @@ -58,7 +57,7 @@ class MainViewModel(private val llamaAndroid: LLamaAndroid = LLamaAndroid.instan | ||||
|         viewModelScope.launch { | ||||
|             try { | ||||
|                 val start = System.nanoTime() | ||||
|                 val warmupResult = llamaAndroid.bench(pp, tg, pl, nr) | ||||
|                 val warmupResult = llm.bench(pp, tg, pl, nr) | ||||
|                 val end = System.nanoTime() | ||||
|  | ||||
|                 messages += warmupResult | ||||
| @@ -71,7 +70,7 @@ class MainViewModel(private val llamaAndroid: LLamaAndroid = LLamaAndroid.instan | ||||
|                     return@launch | ||||
|                 } | ||||
|  | ||||
|                 messages += llamaAndroid.bench(512, 128, 1, 3) | ||||
|                 messages += llm.bench(512, 128, 1, 3) | ||||
|             } catch (exc: IllegalStateException) { | ||||
|                 Log.e(tag, "bench() failed", exc) | ||||
|                 messages += exc.message!! | ||||
| @@ -82,7 +81,7 @@ class MainViewModel(private val llamaAndroid: LLamaAndroid = LLamaAndroid.instan | ||||
|     fun load(pathToModel: String) { | ||||
|         viewModelScope.launch { | ||||
|             try { | ||||
|                 llamaAndroid.load(pathToModel) | ||||
|                 llm.load(pathToModel) | ||||
|                 messages += "Loaded $pathToModel" | ||||
|             } catch (exc: IllegalStateException) { | ||||
|                 Log.e(tag, "load() failed", exc) | ||||
|   | ||||
| @@ -2,5 +2,4 @@ | ||||
| plugins { | ||||
|     id("com.android.application") version "8.2.0" apply false | ||||
|     id("org.jetbrains.kotlin.android") version "1.9.0" apply false | ||||
|     id("com.android.library") version "8.2.0" apply false | ||||
| } | ||||
|   | ||||
							
								
								
									
										1
									
								
								examples/llama.android/llama/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								examples/llama.android/llama/.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1 +0,0 @@ | ||||
| /build | ||||
							
								
								
									
										21
									
								
								examples/llama.android/llama/proguard-rules.pro
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										21
									
								
								examples/llama.android/llama/proguard-rules.pro
									
									
									
									
										vendored
									
									
								
							| @@ -1,21 +0,0 @@ | ||||
| # Add project specific ProGuard rules here. | ||||
| # You can control the set of applied configuration files using the | ||||
| # proguardFiles setting in build.gradle. | ||||
| # | ||||
| # For more details, see | ||||
| #   http://developer.android.com/guide/developing/tools/proguard.html | ||||
|  | ||||
| # If your project uses WebView with JS, uncomment the following | ||||
| # and specify the fully qualified class name to the JavaScript interface | ||||
| # class: | ||||
| #-keepclassmembers class fqcn.of.javascript.interface.for.webview { | ||||
| #   public *; | ||||
| #} | ||||
|  | ||||
| # Uncomment this to preserve the line number information for | ||||
| # debugging stack traces. | ||||
| #-keepattributes SourceFile,LineNumberTable | ||||
|  | ||||
| # If you keep the line number information, uncomment this to | ||||
| # hide the original source file name. | ||||
| #-renamesourcefileattribute SourceFile | ||||
| @@ -1,24 +0,0 @@ | ||||
| package android.llama.cpp | ||||
|  | ||||
| import androidx.test.platform.app.InstrumentationRegistry | ||||
| import androidx.test.ext.junit.runners.AndroidJUnit4 | ||||
|  | ||||
| import org.junit.Test | ||||
| import org.junit.runner.RunWith | ||||
|  | ||||
| import org.junit.Assert.* | ||||
|  | ||||
| /** | ||||
|  * Instrumented test, which will execute on an Android device. | ||||
|  * | ||||
|  * See [testing documentation](http://d.android.com/tools/testing). | ||||
|  */ | ||||
| @RunWith(AndroidJUnit4::class) | ||||
| class ExampleInstrumentedTest { | ||||
|     @Test | ||||
|     fun useAppContext() { | ||||
|         // Context of the app under test. | ||||
|         val appContext = InstrumentationRegistry.getInstrumentation().targetContext | ||||
|         assertEquals("android.llama.cpp.test", appContext.packageName) | ||||
|     } | ||||
| } | ||||
| @@ -1,4 +0,0 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <manifest xmlns:android="http://schemas.android.com/apk/res/android"> | ||||
|  | ||||
| </manifest> | ||||
| @@ -1,49 +0,0 @@ | ||||
| # For more information about using CMake with Android Studio, read the | ||||
| # documentation: https://d.android.com/studio/projects/add-native-code.html. | ||||
| # For more examples on how to use CMake, see https://github.com/android/ndk-samples. | ||||
|  | ||||
| # Sets the minimum CMake version required for this project. | ||||
| cmake_minimum_required(VERSION 3.22.1) | ||||
|  | ||||
| # Declares the project name. The project name can be accessed via ${ PROJECT_NAME}, | ||||
| # Since this is the top level CMakeLists.txt, the project name is also accessible | ||||
| # with ${CMAKE_PROJECT_NAME} (both CMake variables are in-sync within the top level | ||||
| # build script scope). | ||||
| project("llama-android") | ||||
|  | ||||
| include(FetchContent) | ||||
| FetchContent_Declare( | ||||
|         llama | ||||
|         GIT_REPOSITORY https://github.com/ggerganov/llama.cpp | ||||
|         GIT_TAG        master | ||||
| ) | ||||
|  | ||||
| # Also provides "common" | ||||
| FetchContent_MakeAvailable(llama) | ||||
|  | ||||
| # Creates and names a library, sets it as either STATIC | ||||
| # or SHARED, and provides the relative paths to its source code. | ||||
| # You can define multiple libraries, and CMake builds them for you. | ||||
| # Gradle automatically packages shared libraries with your APK. | ||||
| # | ||||
| # In this top level CMakeLists.txt, ${CMAKE_PROJECT_NAME} is used to define | ||||
| # the target library name; in the sub-module's CMakeLists.txt, ${PROJECT_NAME} | ||||
| # is preferred for the same purpose. | ||||
| # | ||||
| # In order to load a library into your app from Java/Kotlin, you must call | ||||
| # System.loadLibrary() and pass the name of the library defined here; | ||||
| # for GameActivity/NativeActivity derived applications, the same library name must be | ||||
| # used in the AndroidManifest.xml file. | ||||
| add_library(${CMAKE_PROJECT_NAME} SHARED | ||||
|         # List C/C++ source files with relative paths to this CMakeLists.txt. | ||||
|         llama-android.cpp) | ||||
|  | ||||
| # Specifies libraries CMake should link to your target library. You | ||||
| # can link libraries from various origins, such as libraries defined in this | ||||
| # build script, prebuilt third-party libraries, or Android system libraries. | ||||
| target_link_libraries(${CMAKE_PROJECT_NAME} | ||||
|         # List libraries link to the target library | ||||
|         llama | ||||
|         common | ||||
|         android | ||||
|         log) | ||||
| @@ -1,17 +0,0 @@ | ||||
| package android.llama.cpp | ||||
|  | ||||
| import org.junit.Test | ||||
|  | ||||
| import org.junit.Assert.* | ||||
|  | ||||
| /** | ||||
|  * Example local unit test, which will execute on the development machine (host). | ||||
|  * | ||||
|  * See [testing documentation](http://d.android.com/tools/testing). | ||||
|  */ | ||||
| class ExampleUnitTest { | ||||
|     @Test | ||||
|     fun addition_isCorrect() { | ||||
|         assertEquals(4, 2 + 2) | ||||
|     } | ||||
| } | ||||
| @@ -15,4 +15,3 @@ dependencyResolutionManagement { | ||||
|  | ||||
| rootProject.name = "LlamaAndroid" | ||||
| include(":app") | ||||
| include(":llama") | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Brian
					Brian