diff --git a/Android/src/app/src/main/java/com/google/ai/edge/gallery/runtime/LlmModelHelper.kt b/Android/src/app/src/main/java/com/google/ai/edge/gallery/runtime/LlmModelHelper.kt index b5cb4b40e..78c48fd64 100644 --- a/Android/src/app/src/main/java/com/google/ai/edge/gallery/runtime/LlmModelHelper.kt +++ b/Android/src/app/src/main/java/com/google/ai/edge/gallery/runtime/LlmModelHelper.kt @@ -122,4 +122,13 @@ interface LlmModelHelper { * @param model the ongoing model response to be stopped. */ fun stopResponse(model: Model) + + /** + * Counts the number of tokens in the specified text for the model. + * + * @param model the model to use for token counting. + * @param text the text to count tokens for. + * @return the number of tokens, or null if not supported or failed. + */ + suspend fun countTokens(model: Model, text: String): Int? = null } diff --git a/Android/src/app/src/main/java/com/google/ai/edge/gallery/runtime/aicore/AICoreModelHelper.kt b/Android/src/app/src/main/java/com/google/ai/edge/gallery/runtime/aicore/AICoreModelHelper.kt index da9f4af0e..bcbbd1a05 100644 --- a/Android/src/app/src/main/java/com/google/ai/edge/gallery/runtime/aicore/AICoreModelHelper.kt +++ b/Android/src/app/src/main/java/com/google/ai/edge/gallery/runtime/aicore/AICoreModelHelper.kt @@ -240,6 +240,19 @@ object AICoreModelHelper : LlmModelHelper { instance.inferenceJob?.cancel() } + override suspend fun countTokens(model: Model, text: String): Int? { + val instance = model.instance as? AICoreModelInstance ?: return null + return try { + val response = instance.generativeModel.countTokens(generateContentRequest(TextPart(text)) {}) + val totalTokens = response.totalTokens + Log.d(TAG, "Counted tokens: $totalTokens for text: $text") + totalTokens + } catch (e: Exception) { + Log.e(TAG, "Failed to count tokens", e) + null + } + } + override fun runInference( model: Model, input: String, @@ -308,6 +321,7 @@ object AICoreModelHelper : LlmModelHelper { resultListener: ResultListener, onError: (message: String) -> Unit, ) { + Log.d(TAG, "AICore Inference Prompt: $prompt") try { val request = if (images.isNotEmpty()) {