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"}
}

Дополнительные материалы