Trying to load litertlm (e.g. gemma3-270m-it-q8.litertlm) using fromAsset (or even fromBundled) in Android
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await FlutterGemma.initialize();
runApp(const MyApp());
}
class GemmaService {
InferenceModel? _model;
Future<void> initModel() async {
await FlutterGemma.installModel(modelType: ModelType.gemmaIt, fileType: ModelFileType.litertlm).fromAsset('assets/models/gemma3-270m-it-q8.litertlm').install();
_model = await FlutterGemma.getActiveModel(maxTokens: 1024, preferredBackend: PreferredBackend.cpu);
}
Stream<String> askGemmaStream(String prompt) async* {
if (_model == null) await initModel();
final chat = await _model!.createChat();
await chat.addQueryChunk(Message.text(text: prompt, isUser: true));
// Listen to the async stream
yield* chat.generateChatResponseAsync().map((response) {
if (response is TextResponse) {
return response.token; // Stream each individual token
} else if (response is ThinkingResponse) {
return "[Thinking: ${response.content}]";
}
return "";
});
}
class _ChatScreenState extends State<ChatScreen> {
final GemmaService _gemma = GemmaService();
final TextEditingController _controller = TextEditingController();
String _lastResponse = "";
bool _isLoading = false;
void _handleSend() async {
if (_controller.text.isEmpty) return;
setState(() {
_isLoading = true;
_lastResponse = ""; // Clear previous response
});
try {
final stream = _gemma.askGemmaStream(_controller.text);
_controller.clear();
await for (final token in stream) {
setState(() {
_lastResponse += token;
_isLoading = false;
});
}
} catch (e) {
setState(() {
_lastResponse = "Error: $e";
_isLoading = false;
});
}
}
}
I added these lines for GPU in AndroidManifest.xml
<application
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher">
<uses-native-library android:name="libOpenCL.so" android:required="false"/>
<uses-native-library android:name="libOpenCL-car.so" android:required="false"/>
<uses-native-library android:name="libOpenCL-pixel.so" android:required="false"/>
android\app\build.gradle.kts
android {
ndkVersion = "28.2.13676358"
defaultConfig {
ndk {
abiFilters.addAll(listOf("arm64-v8a"))
}
}
}
Error:
[LiteRtLmFfi] Loading native libraries...
E/flutter ( 906): [ERROR:flutter/runtime/dart_vm_initializer.cc(40)] Unhandled Exception: Exception: Failed to load libLiteRtLm.so with RTLD_GLOBAL
E/flutter ( 906): #0 LiteRtLmFfiClient._ensureBindings (package:flutter_gemma/core/ffi/litert_lm_client.dart:225:9)
E/flutter ( 906): #1 LiteRtLmFfiClient.initialize (package:flutter_gemma/core/ffi/litert_lm_client.dart:286:5)
E/flutter ( 906): #2 FlutterGemmaMobile.createModel (package:flutter_gemma/mobile/flutter_gemma_mobile.dart:379:25)
E/flutter ( 906):
E/flutter ( 906): #3 FlutterGemma.getActiveModel (package:flutter_gemma/core/api/flutter_gemma.dart:257:12)
E/flutter ( 906):
E/flutter ( 906): #4 GemmaService.initModel (package:llm_v2/services/gemma_service.dart:12:14)
E/flutter ( 906):
E/flutter ( 906): #5 GemmaService.askGemmaStream (package:llm_v2/services/gemma_service.dart:36:25)
E/flutter ( 906):
E/flutter ( 906): #6 _ChatScreenState._handleSend (package:llm_v2/screens/chat_screen.dart:46:7)
E/flutter ( 906):
Note:
- I tried preferredBackend: PreferredBackend.cpu or preferredBackend: PreferredBackend.gpu but both didn't work
- I tried running using --enable-experiment=native-assets but didn't work also
- That code works with models with .Task extensions
flutter doctor -v:
Flutter (Channel stable, 3.41.9, on Microsoft Windows [Version 10.0.19045.6466], locale en-US) [5.7s]
• Flutter version 3.41.9 on channel stable at G:\Flutter_SDK\flutter_windows_3.41.9-stable\flutter
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision 00b0c91f06 (10 days ago), 2026-04-29 10:03:19 -0700
• Engine revision 42d3d75a56
• Dart version 3.11.5
• DevTools version 2.54.2
• Feature flags: enable-web, enable-linux-desktop, enable-macos-desktop, enable-windows-desktop, enable-android,
enable-ios, cli-animations, enable-native-assets, omit-legacy-version-file, enable-lldb-debugging,
enable-uiscene-migration
Android toolchain - develop for Android devices (Android SDK version 35.0.0) [251.8s]
• Android SDK at G:\Android_SDK\SDK2
• Platform android-36, build-tools 35.0.0
• ANDROID_HOME = G:\Android_SDK\SDK2
• Java binary at: C:\Program Files\Java\jdk-21\bin\java
• Java version Java(TM) SE Runtime Environment (build 21.0.9+7-LTS-338)
• All Android licenses accepted.
Device Info:
- Manufacturer/Brand: Xiaomi
- Device Model: Mi 9T
- Android Version: Android 10 QKQ1.190825.002
- CPU: Octa-core Max 2.2GHz
- GPU Renderer: Adreno 618
- Mi 9T (mobile) • c7590258 • android-arm64 • Android 10 (API 29)
Trying to load litertlm (e.g. gemma3-270m-it-q8.litertlm) using fromAsset (or even fromBundled) in Android
I added these lines for GPU in AndroidManifest.xml
android\app\build.gradle.kts
Error:
[LiteRtLmFfi] Loading native libraries...
E/flutter ( 906): [ERROR:flutter/runtime/dart_vm_initializer.cc(40)] Unhandled Exception: Exception: Failed to load libLiteRtLm.so with RTLD_GLOBAL
E/flutter ( 906): #0 LiteRtLmFfiClient._ensureBindings (package:flutter_gemma/core/ffi/litert_lm_client.dart:225:9)
E/flutter ( 906): #1 LiteRtLmFfiClient.initialize (package:flutter_gemma/core/ffi/litert_lm_client.dart:286:5)
E/flutter ( 906): #2 FlutterGemmaMobile.createModel (package:flutter_gemma/mobile/flutter_gemma_mobile.dart:379:25)
E/flutter ( 906):
E/flutter ( 906): #3 FlutterGemma.getActiveModel (package:flutter_gemma/core/api/flutter_gemma.dart:257:12)
E/flutter ( 906):
E/flutter ( 906): #4 GemmaService.initModel (package:llm_v2/services/gemma_service.dart:12:14)
E/flutter ( 906):
E/flutter ( 906): #5 GemmaService.askGemmaStream (package:llm_v2/services/gemma_service.dart:36:25)
E/flutter ( 906):
E/flutter ( 906): #6 _ChatScreenState._handleSend (package:llm_v2/screens/chat_screen.dart:46:7)
E/flutter ( 906):
Note:
flutter doctor -v:
Device Info: