π± Gemma 3 270M Form Generator - TFLite (Android)
Production-ready TFLite models untuk Android deployment dengan MediaPipe. 3 quantization options: FP32, FP16, INT8.
π¦ Available Models
INT8 (Recommended for Production) β
- File:
model_int8.tflite - Size: ~70 MB
- Quality: Good (minimal degradation)
- Speed: Fastest
- Memory: Lowest (~200 MB)
- Use case: Production mobile apps
FP16 (High-end Devices)
- File:
model_float16.tflite - Size: ~130 MB
- Quality: High
- Speed: Medium-fast
- Memory: Medium (~250 MB)
- Use case: Flagship devices
FP32 (Testing/Desktop)
- File:
model_float32.tflite - Size: ~250 MB
- Quality: Highest
- Speed: Slower
- Memory: Highest (~400 MB)
- Use case: Testing, desktop apps
π Quick Start - Android Integration
Step 1: Download Model
# Download INT8 model (recommended)
wget https://huggingface.co/bhismaperkasa/gemma-3-1B-it-form-generator-q4_4096-tflite/resolve/main/model_int8.tflite
Step 2: Add to Android Project
app/
src/
main/
assets/
model_int8.tflite β Copy here
Step 3: Add Dependencies
// app/build.gradle
dependencies {
implementation 'org.tensorflow:tensorflow-lite:2.14.0'
implementation 'org.tensorflow:tensorflow-lite-gpu:2.14.0'
implementation 'org.tensorflow:tensorflow-lite-support:0.4.4'
}
Step 4: Load & Run Model
import org.tensorflow.lite.Interpreter
import java.io.FileInputStream
import java.nio.MappedByteBuffer
import java.nio.channels.FileChannel
class FormGeneratorModel(context: Context) {
private val interpreter: Interpreter
init {
// Load model
val model = loadModelFile(context, "model_int8.tflite")
// Configure interpreter
val options = Interpreter.Options()
options.setNumThreads(4) // Use 4 threads
interpreter = Interpreter(model, options)
}
private fun loadModelFile(context: Context, filename: String): MappedByteBuffer {
val assetFileDescriptor = context.assets.openFd(filename)
val inputStream = FileInputStream(assetFileDescriptor.fileDescriptor)
val fileChannel = inputStream.channel
val startOffset = assetFileDescriptor.startOffset
val declaredLength = assetFileDescriptor.declaredLength
return fileChannel.map(
FileChannel.MapMode.READ_ONLY,
startOffset,
declaredLength
)
}
fun generateForm(prompt: String): String {
// Tokenize input
val inputTokens = tokenizer.encode(prompt)
// Prepare input tensors
val inputArray = Array(1) { inputTokens }
// Prepare output tensors
val outputArray = Array(1) { IntArray(512) }
// Run inference
interpreter.run(inputArray, outputArray)
// Decode output
val result = tokenizer.decode(outputArray[0])
return result
}
fun close() {
interpreter.close()
}
}
Step 5: Use in Activity
class MainActivity : AppCompatActivity() {
private lateinit var model: FormGeneratorModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Load model
model = FormGeneratorModel(this)
// Generate form
val formJson = model.generateForm("buatkan form login")
// Parse & display
displayForm(formJson)
}
override fun onDestroy() {
super.onDestroy()
model.close()
}
}
π Performance Benchmarks
Flagship Devices (2024)
| Model | Init Time | Inference Time | Memory | Quality Score |
|---|---|---|---|---|
| INT8 | 2-3s | 1-2s | ~200 MB | 4.2/5.0 |
| FP16 | 3-4s | 2-3s | ~250 MB | 4.5/5.0 |
| FP32 | 4-5s | 3-5s | ~400 MB | 4.7/5.0 |
Example devices: Samsung S24, Pixel 9, iPhone 15 Pro
Mid-range Devices (2023)
| Model | Init Time | Inference Time | Memory | Quality Score |
|---|---|---|---|---|
| INT8 | 3-5s | 2-4s | ~200 MB | 4.2/5.0 |
| FP16 | 5-7s | 4-6s | ~250 MB | 4.5/5.0 |
| FP32 | 7-10s | 6-10s | ~400 MB | 4.7/5.0 |
Example devices: Redmi Note 12, Galaxy A54
Budget Devices (2022)
| Model | Init Time | Inference Time | Memory | Quality Score |
|---|---|---|---|---|
| INT8 | 5-8s | 4-8s | ~250 MB | 4.2/5.0 |
| FP16 | 8-12s | 8-15s | ~300 MB | 4.5/5.0 |
| FP32 | Not recommended | - | - | - |
Example devices: Entry-level Redmi, Samsung A-series
π― Model Info
- Base Model: google/gemma-3-270m-it
- Training Framework: Unsloth (2x faster)
- Training Precision: BF16 (pure, no quantization)
- Language: Bahasa Indonesia
- Task: Form definition generation (JSON)
- Dataset: bhismaperkasa/form_dinamis
- Training Epochs: 4
π Example Output
Input:
buatkan form login dengan email dan password
Output:
{
"id": "form_login_001",
"title": "Form Login",
"category": "authentication",
"formDefinition": {
"sections": [
{
"sectionId": "section_1",
"title": "Login",
"fields": [
{
"fieldId": "email",
"label": "Email",
"fieldType": "EMAIL",
"required": true,
"placeholder": "Masukkan email"
},
{
"fieldId": "password",
"label": "Password",
"fieldType": "PASSWORD",
"required": true,
"placeholder": "Masukkan password"
}
]
}
]
}
}
π§ Optimization Tips
1. Use GPU Delegate (if available)
val options = Interpreter.Options()
val gpuDelegate = GpuDelegate()
options.addDelegate(gpuDelegate)
2. Use NNAPI Delegate (Android 8.1+)
val options = Interpreter.Options()
val nnApiDelegate = NnApiDelegate()
options.addDelegate(nnApiDelegate)
3. Optimize Thread Count
// Use CPU core count
val numThreads = Runtime.getRuntime().availableProcessors()
options.setNumThreads(numThreads)
4. Cache Model in Memory
// Load once, reuse multiple times
companion object {
private var cachedInterpreter: Interpreter? = null
}
π± Device Requirements
- Minimum Android: 8.0 (API 26)
- Recommended: Android 10+ (API 29)
- RAM: 2 GB minimum, 4 GB recommended
- Storage: 100 MB free space
- Processor: ARM64 or x86_64
π Technical Details
Quantization
- INT8: 8-bit integer quantization (4x smaller than FP32)
- FP16: 16-bit floating point (2x smaller than FP32)
- FP32: Full 32-bit precision (baseline)
Conversion Process
- Train with BF16 (PyTorch)
- Convert to FP32 (for TFLite compatibility)
- Apply quantization (INT8/FP16)
- Optimize for mobile (TFLite)
π Related Models
- PyTorch (BF16): bhismaperkasa/gemma-3-270m-form-generator-bf16
- LoRA Adapter: bhismaperkasa/gemma-3-270m-form-generator-adapter
π Resources
βοΈ License
Apache 2.0 (following Gemma license)
π€ Support
For issues or questions:
- Open issue on GitHub
- Check TFLite documentation
- Review Android integration guide
Ready for production Android apps! ππ±
- Downloads last month
- 4
Inference Providers
NEW
This model isn't deployed by any Inference Provider.
π
Ask for provider support