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، ممّا يتيح ربطها مباشرة بـ Codable في Swift أو بفئة بيانات @Serializable في Kotlin.

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

قراءات إضافيّة