|
|
--- |
|
|
tags: |
|
|
- functiongemma |
|
|
- functiongemma-tuning-lab |
|
|
- outdoor-safety |
|
|
- hiking |
|
|
- function-calling |
|
|
- android |
|
|
license: gemma |
|
|
language: |
|
|
- en |
|
|
base_model: google/functiongemma-2b-it |
|
|
--- |
|
|
|
|
|
# FunctionGemma Safety Agent for Outdoor Navigation |
|
|
|
|
|
A fine-tuned FunctionGemma 270M model that acts as an intelligent safety decision orchestrator for hikers, providing proactive recommendations about when to turn around or stop based on real-time conditions. |
|
|
|
|
|
## Model Details |
|
|
|
|
|
### Model Description |
|
|
|
|
|
Unlike traditional reactive hiking apps (Komoot, AllTrails, Gaia GPS) that only show your position on a route, this model proactively monitors conditions and answers contextual safety questions like "Given my dropping pace, fading daylight, and low battery, should I turn around?" |
|
|
|
|
|
The model performs pattern matching and tool selection while deterministic Kotlin code handles all safety-critical computations. This hybrid architecture balances AI flexibility with reliability requirements for safety-critical applications. |
|
|
|
|
|
- **Developed by:** monday8am |
|
|
- **Model type:** Function-calling language model |
|
|
- **Language(s):** English |
|
|
- **License:** Gemma License |
|
|
- **Finetuned from model:** google/functiongemma-2b-it (270M parameters) |
|
|
|
|
|
### Model Sources |
|
|
|
|
|
- **Repository:** https://huggingface.co/monday8am/functiongemma-safety-agent |
|
|
- **Base Model:** https://huggingface.co/google/functiongemma-2b-it |
|
|
|
|
|
## Uses |
|
|
|
|
|
### Direct Use |
|
|
|
|
|
This model is designed for integration into Android hiking/outdoor navigation apps as an offline-capable safety advisor. The model orchestrates four safety tools: |
|
|
|
|
|
1. **assess_completion_risk** - Evaluates probability of safe route completion |
|
|
2. **get_segment_ahead** - Analyzes upcoming terrain difficulty |
|
|
3. **find_nearest_poi** - Locates resources (water, shelter, trailhead) |
|
|
4. **get_bailout_options** - Identifies alternative exit routes |
|
|
|
|
|
Example interaction: |
|
|
``` |
|
|
Context: Time 14:30, Sunset 17:45, Progress 6.2km/12km, Pace 3.1 km/h (down from 4.2), Battery 67% |
|
|
User: "Should I continue or turn around?" |
|
|
Model: → assess_completion_risk(query: "pace") |
|
|
``` |
|
|
|
|
|
### Downstream Use |
|
|
|
|
|
The model outputs function calls that trigger Kotlin code execution in the host Android app. It is designed for LiteRT deployment for offline inference on mobile devices (~288MB quantized). |
|
|
|
|
|
Architecture flow: |
|
|
``` |
|
|
Sensor Data → Kotlin Orchestrator → FunctionGemma → Tool Selection → Kotlin Execution → Safety Alert |
|
|
``` |
|
|
|
|
|
### Out-of-Scope Use |
|
|
|
|
|
- **NOT for direct safety computation** - The model selects tools; it does not execute risk calculations |
|
|
- **NOT a replacement for judgment** - Users must make final decisions considering factors the model cannot observe |
|
|
- **NOT for emergency services** - Does not contact help or provide medical advice |
|
|
- **NOT for other outdoor sports without fine-tuning** - Trained specifically on hiking scenarios |
|
|
|
|
|
## Bias, Risks, and Limitations |
|
|
|
|
|
**Safety-Critical Context**: This model informs decisions affecting user safety. The architecture intentionally separates AI decision orchestration from deterministic safety computations. |
|
|
|
|
|
**Training Distribution**: Fine-tuned on hiking scenarios; performance may degrade for climbing, trail running, or winter sports without additional training. |
|
|
|
|
|
**Sensor Dependency**: Accuracy depends on correct sensor input (GPS, accelerometer, battery status) from the device. |
|
|
|
|
|
**No Physical Observation**: Cannot assess trail conditions, weather microclimate, or user physical state directly. |
|
|
|
|
|
### Recommendations |
|
|
|
|
|
- Users should treat model outputs as recommendations, not commands |
|
|
- Always consider personal fitness, group dynamics, and observed conditions |
|
|
- Maintain traditional safety practices (tell someone your route, carry essentials) |
|
|
- The model should augment, not replace, outdoor judgment and skills |
|
|
- Test thoroughly before relying on the system in remote areas |
|
|
|
|
|
## How to Get Started with the Model |
|
|
```python |
|
|
# Convert to LiteRT format for Android deployment |
|
|
from transformers import AutoTokenizer, AutoModelForCausalLM |
|
|
import ai_edge_torch |
|
|
|
|
|
model = AutoModelForCausalLM.from_pretrained("monday8am/functiongemma-safety-agent") |
|
|
tokenizer = AutoTokenizer.from_pretrained("monday8am/functiongemma-safety-agent") |
|
|
|
|
|
# Export to LiteRT |
|
|
edge_model = ai_edge_torch.convert(model, tokenizer) |
|
|
edge_model.export("safety_agent.tflite") |
|
|
``` |
|
|
|
|
|
**Android Integration** (Kotlin): |
|
|
```kotlin |
|
|
// Load model |
|
|
val interpreter = Interpreter(loadModelFile("safety_agent.tflite")) |
|
|
|
|
|
// Prepare context |
|
|
val context = """ |
|
|
Time: ${getCurrentTime()}, Sunset: ${getSunsetTime()} |
|
|
Progress: ${getProgressKm()}km of ${getTotalKm()}km |
|
|
Pace: ${getCurrentPace()} km/h |
|
|
Battery: ${getBatteryPercent()}% |
|
|
""".trimIndent() |
|
|
|
|
|
// Get tool selection from model |
|
|
val toolCall = interpreter.runInference(context, userQuery) |
|
|
|
|
|
// Execute selected tool with Kotlin |
|
|
when (toolCall.name) { |
|
|
"assess_completion_risk" -> assessRisk(toolCall.args["query"]) |
|
|
"get_segment_ahead" -> getSegmentInfo(toolCall.args["query"]) |
|
|
// ... handle other tools |
|
|
} |
|
|
``` |
|
|
|
|
|
## Training Details |
|
|
|
|
|
### Training Data |
|
|
|
|
|
**360 training examples** generated from 18 carefully crafted seed scenarios covering: |
|
|
- Pace decline situations (fatigue, terrain difficulty) |
|
|
- Daylight management (sunset proximity, headlamp decisions) |
|
|
- Resource concerns (water, battery, shelter) |
|
|
- Weather changes (approaching storms, temperature drops) |
|
|
- Navigation decisions (bailout options, POI location) |
|
|
- **"No action needed" cases (~20%)** - Teaching the model when NOT to intervene |
|
|
|
|
|
**Generation Method**: Gemini Flash expansion with controlled variation to ensure diversity while maintaining quality. |
|
|
|
|
|
**Data Format**: FunctionGemma Tuning Lab compliant format with unified `query: string` parameter across all tools. |
|
|
|
|
|
### Training Procedure |
|
|
|
|
|
**Fine-tuning Platform**: FunctionGemma Tuning Lab (no-code UI) |
|
|
|
|
|
#### Training Hyperparameters |
|
|
|
|
|
- **Training regime:** Mixed precision (bf16) |
|
|
- **Epochs:** Tuning Lab default |
|
|
- **Learning rate:** Tuning Lab default adaptive schedule |
|
|
- **Dataset:** 360 examples (train/validation split handled by platform) |
|
|
|
|
|
#### Speeds, Sizes, Times |
|
|
|
|
|
- **Training time:** ~15-30 minutes on Tuning Lab infrastructure |
|
|
- **Model size:** 270M parameters (~288MB quantized for mobile) |
|
|
- **Inference speed:** ~125 tokens/sec on Samsung S25 Ultra (CPU only) |
|
|
|
|
|
## Evaluation |
|
|
|
|
|
### Testing Data, Factors & Metrics |
|
|
|
|
|
#### Testing Data |
|
|
|
|
|
Held-out validation set from the 360-example dataset, ensuring coverage across all tool types and "no action" scenarios. |
|
|
|
|
|
#### Factors |
|
|
|
|
|
Evaluation disaggregated by: |
|
|
- Tool type (4 safety tools + no-tool cases) |
|
|
- Scenario urgency (critical vs. marginal situations) |
|
|
- Context complexity (single vs. multiple risk factors) |
|
|
|
|
|
#### Metrics |
|
|
|
|
|
**Primary Metric**: Tool selection accuracy (correct tool chosen for given scenario) |
|
|
- **Base model**: 58% accuracy |
|
|
- **Fine-tuned model**: 85% accuracy |
|
|
|
|
|
**Secondary Metrics**: |
|
|
- No-tool precision (avoiding false interventions) |
|
|
- Critical scenario recall (catching dangerous situations) |
|
|
|
|
|
### Results |
|
|
|
|
|
| Metric | Base FunctionGemma | Fine-tuned | |
|
|
|--------|-------------------|------------| |
|
|
| Overall Accuracy | 58% | 85% | |
|
|
| Critical Scenario Recall | 62% | 91% | |
|
|
| No-Tool Precision | 45% | 78% | |
|
|
|
|
|
The model shows particular improvement in recognizing when NOT to intervene (avoiding alert fatigue) while maintaining high recall on genuinely dangerous situations. |
|
|
|
|
|
## Environmental Impact |
|
|
|
|
|
Fine-tuning performed using FunctionGemma Tuning Lab infrastructure. |
|
|
|
|
|
- **Hardware Type:** Cloud TPU/GPU (managed by Google) |
|
|
- **Hours used:** ~0.25-0.5 hours |
|
|
- **Cloud Provider:** Google Cloud |
|
|
- **Compute Region:** US (exact region varies) |
|
|
- **Carbon Emitted:** Minimal due to short training time and efficient infrastructure |
|
|
|
|
|
## Technical Specifications |
|
|
|
|
|
### Model Architecture and Objective |
|
|
|
|
|
**Base Architecture**: FunctionGemma 270M (Gemma-2b variant optimized for function calling) |
|
|
|
|
|
**Fine-tuning Objective**: Function-calling accuracy on outdoor safety scenarios with four tools: |
|
|
1. `assess_completion_risk(query: string)` |
|
|
2. `get_segment_ahead(query: string)` |
|
|
3. `find_nearest_poi(query: string)` |
|
|
4. `get_bailout_options(query: string)` |
|
|
|
|
|
**Design Philosophy**: Stateless model calls - the model performs single-turn tool selection while the Kotlin app maintains session state, sensor history, and alert logic. |
|
|
|
|
|
### Compute Infrastructure |
|
|
|
|
|
#### Hardware |
|
|
|
|
|
- **Training:** Google Cloud TPU/GPU via FunctionGemma Tuning Lab |
|
|
- **Inference:** Android devices (CPU-only deployment via LiteRT) |
|
|
- **Target Device:** Tested on Samsung S25 Ultra, compatible with most modern Android devices |
|
|
|
|
|
#### Software |
|
|
|
|
|
- **Training Framework:** FunctionGemma Tuning Lab |
|
|
- **Deployment:** TensorFlow Lite Runtime (LiteRT) for Android |
|
|
- **Development:** Kotlin for Android orchestration layer |
|
|
|
|
|
## Citation |
|
|
```bibtex |
|
|
@misc{functiongemma-safety-agent-2026, |
|
|
author = {monday8am}, |
|
|
title = {FunctionGemma Safety Agent for Outdoor Navigation}, |
|
|
year = {2026}, |
|
|
publisher = {HuggingFace}, |
|
|
howpublished = {\url{https://huggingface.co/monday8am/functiongemma-safety-agent}}, |
|
|
note = {Fine-tuned from google/functiongemma-2b-it for proactive hiking safety recommendations} |
|
|
} |
|
|
``` |
|
|
|
|
|
## Model Card Authors |
|
|
|
|
|
monday8am |
|
|
|
|
|
## Model Card Contact |
|
|
|
|
|
For questions, issues, or collaboration opportunities, please open an issue on the model repository. |