FunctionGemma 270M

FunctionGemma 270M est un dérivé de Gemma 3 affiné pour les appels d'outils et de fonctions structurés. Au lieu de produire du texte libre, il émet une grammaire stricte <start_function_call>call:NAME{...}<end_function_call> que le SDK analyse en valeurs FunctionCall typées. Avec environ 283 Mo sur disque, il est suffisamment petit pour être chargé aux côtés d'un pipeline ASR + TTS sur du matériel de classe smartphone et servir de « routeur » qui transforme l'énoncé d'un utilisateur en invocation d'outil.

Appel de fonctions, embarqué

FunctionGemma s'intègre dans les agents vocaux partout où vous appelleriez sinon un LLM hébergé pour le routage d'outils. La grammaire est stricte par construction, vous récupérez donc directement des objets FunctionCall analysés — pas de réparation JSON, pas de prompt en mode schéma.

Plateformes

PlateformeFormatTailleHuggingFace
Apple (macOS / iOS)CoreML~283 Moaufklarer/FunctionGemma-270M-CoreML
Android (et Linux / Windows via Speech Core)LiteRT-LM~283 Mosoniqo/FunctionGemma-270M-LiteRT-LM

Grammaire

Le modèle est entraîné à émettre un seul appel (ou une séquence d'appels) encadré par deux tokens sentinelles :

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

Le SDK analyse chaque appel en une valeur FunctionCall(name:, arguments:) typée. Les arguments sont décodés en JSON, ce qui vous permet de les mapper directement sur une structure Swift Codable ou une classe de données Kotlin @Serializable.

Swift (Apple, CoreML)

Sur les plateformes Apple, FunctionGemma est exposé via speech-swift sous la forme de la classe FunctionGemma. Elle charge le modèle CoreML depuis Hugging Face à la première utilisation et s'exécute sur le 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)

Sur Android, le modèle est exposé via speech-android sous la forme de audio.soniqo.speech.llm.FunctionGemma. Il s'agit d'un adaptateur « bring-your-own-runtime » : vous fournissez une instance LiteRtLmRuntime (le SDK en livre une par défaut), et FunctionGemma prend en charge le template du prompt et l'analyse de la grammaire.

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

Pour aller plus loin