mobile_rag_engine 0.5.3
mobile_rag_engine: ^0.5.3 copied to clipboard
A high-performance, on-device RAG (Retrieval-Augmented Generation) engine for Flutter. Run semantic search completely offline on iOS and Android with HNSW vector indexing.
Mobile RAG Engine - Example #
A complete on-device RAG (Retrieval-Augmented Generation) implementation.
Quick Start #
import 'package:mobile_rag_engine/mobile_rag_engine.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 1. Initialize MobileRag (Singleton)
await MobileRag.initialize(
tokenizerAsset: 'assets/tokenizer.json',
modelAsset: 'assets/model.onnx',
);
runApp(const MyApp());
}
Adding Documents #
// Add a document with automatic chunking and embedding
final result = await MobileRag.instance.addDocument(
'Flutter is Google\'s UI toolkit for building beautiful apps...',
onProgress: (done, total) => print('Embedding: $done/$total'),
);
print('Created ${result.chunkCount} chunks');
// Rebuild HNSW index after adding documents
await MobileRag.instance.rebuildIndex();
PDF & DOCX Support #
Can automatically extract text from PDF and DOCX files.
import 'dart:io';
// Read file bytes
final file = File('path/to/document.pdf');
final bytes = await file.readAsBytes();
// extract text (using built-in parser)
final text = await extractTextFromDocument(fileBytes: bytes.toList());
// Then add to RAG
await MobileRag.instance.addDocument(
text,
metadata: '{"source": "document.pdf"}',
filePath: 'document.pdf', // hints chunking strategy
);
Managing Documents #
// Remove a source by ID
await MobileRag.instance.engine.removeSource(sourceId);
// Check stats
final stats = await MobileRag.instance.engine.getStats();
print('Total sources: ${stats.sourceCount}');
Semantic Search #
// Search for relevant chunks
final searchResult = await MobileRag.instance.search(
'How to build mobile apps?',
topK: 5,
tokenBudget: 2000,
);
// Get assembled context for LLM
print('Found ${searchResult.chunks.length} chunks');
print('Context tokens: ${searchResult.context.estimatedTokens}');
// Format prompt for LLM
final prompt = MobileRag.instance.formatPrompt(
'How to build mobile apps?',
searchResult,
);
Advanced Usage (Low-Level) #
For advanced scenarios, you can still access the underlying services:
// Batch embedding directly
final embeddings = await EmbeddingService.embedBatch(
['Text 1', 'Text 2', 'Text 3'],
);
// Manual Tokenizer initialization
await initTokenizer(tokenizerPath: 'path/to/tokenizer.json');
Performance #
| Operation | Time | Engine |
|---|---|---|
| Tokenization | 0.04ms | Rust |
| HNSW Search | 0.3ms | Rust |
| Embedding | 25-100ms | ONNX |
See the full example app in the GitHub repository.