FunctionGemma 270M

FunctionGemma 270M é um derivado do Gemma 3 ajustado para chamadas estruturadas de ferramentas e funções. Em vez de texto livre, ele emite uma gramática estrita <start_function_call>call:NAME{...}<end_function_call> que o SDK converte em valores FunctionCall tipados. Com cerca de 283 MB em disco, é pequeno o suficiente para ser carregado junto com um pipeline de ASR + TTS em hardware de classe smartphone e servir como o “roteador” que transforma a fala do usuário em uma invocação de ferramenta.

Chamada de funções no dispositivo

FunctionGemma se encaixa em agentes de voz em qualquer lugar onde você normalmente chamaria um LLM hospedado para roteamento de ferramentas. A gramática é estrita por construção, portanto você recebe de volta objetos FunctionCall já analisados — sem reparo de JSON, sem prompts de schema-mode.

Plataformas

PlataformaFormatoTamanhoHuggingFace
Apple (macOS / iOS)CoreML~283 MBaufklarer/FunctionGemma-270M-CoreML
Android (e Linux / Windows via Speech Core)LiteRT-LM~283 MBsoniqo/FunctionGemma-270M-LiteRT-LM

Gramática

O modelo é treinado para emitir uma única chamada (ou uma sequência de chamadas) envolvida por dois tokens sentinela:

<start_function_call>call:set_timer{"minutes": 5, "label": "tea"}<end_function_call>

O SDK converte cada chamada em um valor FunctionCall(name:, arguments:) tipado. Os argumentos são decodificados como JSON, de modo que você pode mapeá-los diretamente para um Codable em Swift ou uma classe de dados @Serializable em Kotlin.

Swift (Apple, CoreML)

Nas plataformas Apple, o FunctionGemma é exposto através do speech-swift como a classe FunctionGemma. Ele carrega o modelo CoreML do HuggingFace no primeiro uso e roda no 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)

No Android, o modelo é exposto através do speech-android como audio.soniqo.speech.llm.FunctionGemma. É um adaptador bring-your-own-runtime: você fornece uma instância de LiteRtLmRuntime (o SDK fornece uma padrão), e o FunctionGemma cuida do template de prompt e da análise da gramática.

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

Leitura adicional