Text Generation
Transformers
Safetensors
English
gemma3_text
function-calling
tool-use
on-device
edge
functiongemma
personal-assistant
synthetic-data
conversational
text-generation-inference
Instructions to use levelplaystudio/echo with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use levelplaystudio/echo with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="levelplaystudio/echo") messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# pip install -U transformers accelerate # Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("levelplaystudio/echo") model = AutoModelForCausalLM.from_pretrained("levelplaystudio/echo", device_map="auto") messages = [ {"role": "user", "content": "Who are you?"}, ] inputs = tokenizer.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=256) print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use levelplaystudio/echo with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "levelplaystudio/echo" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "levelplaystudio/echo", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/levelplaystudio/echo
- SGLang
How to use levelplaystudio/echo with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "levelplaystudio/echo" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "levelplaystudio/echo", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "levelplaystudio/echo" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "levelplaystudio/echo", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use levelplaystudio/echo with Docker Model Runner:
docker model run hf.co/levelplaystudio/echo
|
Download README.md from levelplaystudio/echo: direct link, hf CLI and curl.
- Browser
- Download file 6.78 kB
-
https://huggingface.co/levelplaystudio/echo/resolve/main/README.md
- Command line
-
hf download hf://levelplaystudio/echo/README.md
-
curl -L -o README.md https://huggingface.co/levelplaystudio/echo/resolve/main/README.md
6.78 kB
| license: apache-2.0 | |
| base_model: google/functiongemma-270m-it | |
| library_name: transformers | |
| pipeline_tag: text-generation | |
| language: | |
| - en | |
| tags: | |
| - function-calling | |
| - tool-use | |
| - on-device | |
| - edge | |
| - functiongemma | |
| - personal-assistant | |
| - synthetic-data | |
| - safetensors | |
| model-index: | |
| - name: echo-functiongemma-270m | |
| results: [] | |
| # ECHO FunctionGemma 270M | |
| ECHO is a small on-device personal assistant model. It reads a user request and chooses the right tool, with arguments, to carry it out on the local machine. It is a fine-tune of [`google/functiongemma-270m-it`](https://huggingface.co/google/functiongemma-270m-it) and is built to run without a cloud connection on hardware such as a Raspberry Pi 4B (4GB) or a Windows desktop. | |
| **Creators:** Lakshy M. Chaurasia and Pratigya M. Chaurasia, [Level Play Studio](#). | |
| ## Model details | |
| | Item | Value | | |
| | :--- | :--- | | |
| | Base model | `google/functiongemma-270m-it` | | |
| | Parameters | ~270M | | |
| | Format | Safetensors (`model.safetensors`) | | |
| | Language | English (Indian English context) | | |
| | Task | Function calling for personal computer and assistant actions | | |
| | Intended hardware | Raspberry Pi 4B (4GB), Windows desktop, edge devices | | |
| | Context | Single-turn tool selection | | |
| ## Supported tools | |
| The model is trained to call these 13 tools: | |
| | Tool | Purpose | | |
| | :--- | :--- | | |
| | `music_manager` | Play, pause, resume, next, previous. Includes classic Indian film and ghazal music. | | |
| | `get_weather` | Current weather and forecasts for a city or region. | | |
| | `open_application` | Launch desktop apps, terminals, and utilities. | | |
| | `close_application` | Close or terminate running apps. | | |
| | `task_manager` | Create, list, delete, and complete tasks and reminders. | | |
| | `get_current_time` | Return the local time. | | |
| | `get_current_date` | Return the date and day of the week. | | |
| | `get_system_info` | CPU, RAM, disk, and OS diagnostics. | | |
| | `volume_manager` | Set, mute, unmute, increase, or decrease audio volume (0–100). | | |
| | `take_screenshot` | Capture the full screen, the active window, or a region. | | |
| | `file_manager` | List, read, create, write, append, search, rename, move, copy, delete, and inspect files and folders. Includes multi-turn navigation (search, list, read, then respond). | | |
| | `response` | Conversational replies and final answers after a tool call. Includes ECHO's philosophical persona and creator information. | | |
| | `web_search` | Search the web for current news, facts, and tutorials. | | |
| ## Training data | |
| - **Source:** synthetic. User queries and tool calls were generated with Gemini and checked against the tool schemas before use. | |
| - **Size:** about 5,200 examples in total, split roughly 90% train and 10% evaluation, stratified by tool. | |
| - **Format:** each example is a chat with a `developer` message (date, time, day of week, and the tool list), a `user` message, and an `assistant` tool call. Tool lists are shuffled per example. | |
| - **Coverage:** English only. Indian cities, names, festivals, and Windows paths. Varied styles: formal requests, short voice commands, slang, typos, and multi-sentence commands. | |
| - **Validation:** arguments must match the schema exactly (names, types, enum values, and the 0–100 volume range). Non-English text and duplicate queries were removed. | |
| ## Evaluation | |
| Evaluation uses a held-out split of the synthetic data. Replace the placeholders below with your measured results. | |
| | Metric | Score | | |
| | :--- | :--- | | |
| | Tool-name accuracy | `XX.XX%` | | |
| | Exact-arguments accuracy | `XX.XX%` | | |
| | Schema-valid calls | `XX.XX%` | | |
| Synthetic evaluation does not show real-world performance. Test on real user phrasings before relying on the model. | |
| ## How to use | |
| ```python | |
| from transformers import AutoTokenizer, AutoModelForCausalLM | |
| repo_id = "YOUR_USERNAME/echo-functiongemma-270m" | |
| tokenizer = AutoTokenizer.from_pretrained(repo_id) | |
| model = AutoModelForCausalLM.from_pretrained(repo_id, torch_dtype="auto") | |
| tools = [ | |
| { | |
| "type": "function", | |
| "function": { | |
| "name": "volume_manager", | |
| "description": "Adjusts host master audio volume or toggles mute status.", | |
| "parameters": { | |
| "type": "object", | |
| "properties": { | |
| "action": {"type": "string", "description": "Volume action: 'set', 'mute', 'unmute', 'increase', 'decrease'."}, | |
| "level": {"type": "integer", "description": "Integer audio level between 0 and 100."}, | |
| }, | |
| "required": ["action"], | |
| }, | |
| }, | |
| }, | |
| # Add the other tools from the table above as needed. | |
| ] | |
| messages = [ | |
| {"role": "developer", "content": "Current date and time given in YYYY-MM-DDTHH:MM:SS format: 2026-10-18T09:30:00\nDay of week is Sunday\nYou are a model that can do function calling with the following functions\n"}, | |
| {"role": "user", "content": "Lower the sound to 20 percent"}, | |
| ] | |
| inputs = tokenizer.apply_chat_template(messages, tools=tools, add_generation_prompt=True, return_tensors="pt", return_dict=True) | |
| output = model.generate(**inputs, max_new_tokens=128) | |
| print(tokenizer.decode(output[0][inputs["input_ids"].shape[-1]:], skip_special_tokens=False)) | |
| ``` | |
| Parse the generated tool call and run it through your own tool dispatcher. Do not execute model output directly without checking the tool name and arguments against the schema. | |
| ## Limitations | |
| - Trained on synthetic data, so it may miss phrasings and situations that real users write. | |
| - Supports only the 13 tools listed above. Requests for other tools will not be handled correctly. | |
| - Multi-turn examples cover mainly `file_manager` navigation and summarizing tool output in `response`. Long multi-step workflows across other tools are not covered. | |
| - English only. | |
| - Music knowledge covers mainly Indian film and ghazal music from about 1950 to 1980. Verify artist and song names for other genres. | |
| - Argument values such as file paths and times should be checked before any action is taken on the device. | |
| ## Safety | |
| ECHO can open and close applications, change system volume, and capture the screen. Run actions through a confirmation step for anything destructive, and never run it with elevated permissions without review. | |
| ## Citation | |
| ``` | |
| @misc{echo_functiongemma_270m, | |
| title = {ECHO FunctionGemma 270M}, | |
| author = {Chaurasia, Lakshy M. and Chaurasia, Pratigya M.}, | |
| year = {2026}, | |
| note = {Level Play Studio} | |
| } | |
| ``` | |
| ## License | |
| This model is licensed under the Apache License, Version 2.0. See the [`LICENSE`](LICENSE) file for the full text. | |
| Note: the base model `google/functiongemma-270m-it` is distributed under Google's Gemma terms of use, not Apache 2.0. Those terms may apply to derivative weights, so check them before you rely on Apache 2.0 for this model alone. |