LiteRT-LM exports of
google/functiongemma-270m-it
for on-device function calling, plus a separately loadable Control LoRA adapter.
The original stock model.litertlm remains unchanged.
Files
File
Bytes
Purpose
model.litertlm
297,212,528
Original standalone FunctionGemma dynamic-INT8 export.
model-lora16-android.litertlm
327,438,928
Reusable Android/Kotlin 0.14 dynamic-INT8 base. Its default signatures are the rank-16 LoRA graphs, so an adapter is required.
control-r4-rank16.tflite
9,502,720
Control command adapter, loaded separately at runtime.
config.json
—
Export contract, artifact hashes, and benchmark metadata.
The LoRA-enabled base includes 128, 512, and 1024-token prefill graphs, a
1024-token KV cache, the tokenizer, and the FunctionGemma chat template. Base
weights use dynamic INT8 quantization with FP32 activations for CPU/XNNPACK.
Control adapter
The adapter routes a compact offline phone-control surface:
call_contact, dial_number, find_contact, find_music, play_music,
stop_music, set_volume, and list_capabilities.
It was trained as an attention-only rank-8 MLX LoRA on all 18 layers, targeting
Q/K/V/O projections with scale 20. LiteRT-LM 0.14 CPU accepts ranks 16 and 32,
so the export losslessly pads rank 8 to rank 16: the additional A columns and B
rows are exactly zero. The adapter contains 144 external, 64-KiB-aligned FP32
tensor buffers and lora_rank=16 metadata.
Use the compact prompt format that matches training:
text
1<start_of_turn>developer
2You are a model that can do function calling with the following functions
3Available functions: call_contact, dial_number, find_contact, find_music, play_music, set_volume, list_capabilities.
4Music state: idle.<end_of_turn>
5<start_of_turn>user
6set volume to five<end_of_turn>
7<start_of_turn>model
Add stop_music to the available-function line only while music is playing.
The adapter is not intended for the full declaration prompt used by the stock
bundle.
Android Kotlin 0.14
LiteRT-LM 0.14's Kotlin EngineConfig does not expose the engine LoRA-rank
setting used by the C and Python APIs. Therefore Kotlin applications should use
the adapter-required model-lora16-android.litertlm compatibility bundle and
pass the adapter to each conversation:
Greedy decoding is recommended for deterministic tool syntax. Released Kotlin
0.14.0 also lacks a per-conversation output-token cap; close each one-shot
conversation after the command completes.
Validation
The release candidate uses training checkpoint step 400.
The Android engine loaded in 641 ms with an existing XNNPACK cache. Latency is
generation-only after engine initialization. The 136-example held-out set
contains action, no-action, and music-state cases. Dynamic INT8 loses routing
accuracy relative to MLX, so applications should confirm high-impact actions
such as dialing and should validate the model against their own command set.
The stock model supports ordinary FunctionGemma declarations and tool-response
turns. The Control adapter is designed for one command and one tool call per
fresh conversation; multi-step chaining and long multi-turn slot filling were
not evaluated.