FunctionGemma 270M

FunctionGemma 270M es un derivado de Gemma 3 afinado para llamadas estructuradas a herramientas y funciones. En lugar de texto libre, emite una gramática estricta <start_function_call>call:NAME{...}<end_function_call> que el SDK convierte en valores FunctionCall tipados. Con aproximadamente 283 MB en disco, es lo bastante pequeño para cargarse junto a un pipeline ASR + TTS en hardware de teléfono y actuar como el «enrutador» que transforma la frase del usuario en una invocación de herramienta.

Llamada a funciones, en el dispositivo

FunctionGemma encaja en los agentes de voz allá donde, de otro modo, se llamaría a un LLM alojado para enrutar herramientas. La gramática es estricta por construcción, así que se obtienen objetos FunctionCall ya parseados directamente: sin reparación de JSON ni prompting en modo esquema.

Plataformas

PlataformaFormatoTamañoHuggingFace
Apple (macOS / iOS)CoreML~283 MBaufklarer/FunctionGemma-270M-CoreML
Android (y Linux / Windows mediante Speech Core)LiteRT-LM~283 MBsoniqo/FunctionGemma-270M-LiteRT-LM

Gramática

El modelo está entrenado para emitir una sola llamada (o una secuencia de llamadas) envuelta entre dos tokens centinela:

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

El SDK convierte cada llamada en un valor FunctionCall(name:, arguments:) tipado. Los argumentos se decodifican como JSON, de modo que se pueden mapear directamente a una clase Swift Codable o a una clase de datos Kotlin @Serializable.

Swift (Apple, CoreML)

En las plataformas Apple, FunctionGemma se expone a través de speech-swift como la clase FunctionGemma. Carga el modelo CoreML desde HuggingFace en el primer uso y se ejecuta en el 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)

En Android el modelo se expone a través de speech-android como audio.soniqo.speech.llm.FunctionGemma. Es un adaptador con runtime intercambiable: tú proporcionas una instancia de LiteRtLmRuntime (el SDK incluye una por defecto) y FunctionGemma se encarga de la plantilla del prompt y del parseo de la 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"}
}

Lecturas adicionales