FunctionGemma 270M
FunctionGemma 270M — это производная от Gemma 3, дообученная для структурированных вызовов инструментов и функций. Вместо свободного текста она выдаёт строгую грамматику <start_function_call>call:NAME{...}<end_function_call>, которую SDK парсит в типизированные значения FunctionCall. Занимая около 283 МБ на диске, она достаточно компактна, чтобы загружаться рядом с пайплайном ASR + TTS на устройствах класса смартфона и служить «маршрутизатором», превращающим реплику пользователя в вызов инструмента.
FunctionGemma встраивается в голосовых агентов везде, где иначе пришлось бы обращаться к облачной LLM для маршрутизации инструментов. Грамматика строгая по построению, поэтому вы получаете уже разобранные объекты FunctionCall — без починки JSON и без подсказок в режиме схемы.
Платформы
| Платформа | Формат | Размер | HuggingFace |
|---|---|---|---|
| Apple (macOS / iOS) | CoreML | ~283 МБ | aufklarer/FunctionGemma-270M-CoreML |
| Android (а также Linux / Windows через Speech Core) | LiteRT-LM | ~283 МБ | soniqo/FunctionGemma-270M-LiteRT-LM |
Грамматика
Модель обучена выдавать один вызов (или последовательность вызовов), обёрнутый в два специальных токена-маркера:
<start_function_call>call:set_timer{"minutes": 5, "label": "tea"}<end_function_call>
SDK разбирает каждый вызов в типизированное значение FunctionCall(name:, arguments:). Аргументы декодируются как JSON, поэтому их можно сразу отобразить на Swift Codable или на Kotlin @Serializable data class.
Swift (Apple, CoreML)
На Apple-платформах FunctionGemma доступна через speech-swift в виде класса FunctionGemma. Он загружает CoreML-модель с HuggingFace при первом использовании и выполняется на Neural Engine.
import FunctionGemma
let model = try await FunctionGemma.fromPretrained()
let tools = """
- set_timer(minutes: Int, label: String)
- get_weather(city: String)
"""
let calls = try model.callFunctions(
tools: tools,
userMessage: "Set a 5 minute tea timer"
)
for call in calls {
print(call.name) // "set_timer"
print(call.arguments) // ["minutes": 5, "label": "tea"]
}
Kotlin (Android, LiteRT-LM)
На Android модель доступна через speech-android как audio.soniqo.speech.llm.FunctionGemma. Это адаптер с подключаемым рантаймом: вы предоставляете экземпляр LiteRtLmRuntime (в SDK уже есть рантайм по умолчанию), а FunctionGemma берёт на себя шаблон промпта и разбор грамматики.
import audio.soniqo.speech.llm.FunctionGemma
import audio.soniqo.speech.llm.LiteRtLmRuntime
val runtime = LiteRtLmRuntime.fromPretrained(context)
val model = FunctionGemma(runtime)
val tools = """
- set_timer(minutes: Int, label: String)
- get_weather(city: String)
""".trimIndent()
val calls = model.callFunctions(
tools = tools,
userMessage = "Set a 5 minute tea timer",
)
for (call in calls) {
println(call.name) // "set_timer"
println(call.arguments) // {"minutes": 5, "label": "tea"}
}
Дополнительные материалы
- Speech Core — C++-движок, в котором работают рантайм LiteRT-LM и цикл вызова функций на Linux, Windows и Android.
- github.com/soniqo/speech-core — оркестрационное ядро и обвязка LiteRT-LM, включая цикл вызова инструментов
VoicePipeline. - github.com/soniqo/speech-swift — Apple SDK со Swift-классом
FunctionGemma. - github.com/soniqo/speech-android — Android SDK с
audio.soniqo.speech.llm.FunctionGemma. - google/gemma-3-270m — исходная базовая модель Gemma 3 270M на HuggingFace.