Text Generation
PEFT
Safetensors
Transformers
English
lora
sft
trl
unsloth
gemma
android
adb
function-calling
tool-use
conversational
Instructions to use Muneeshk/DroidADB with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PEFT
How to use Muneeshk/DroidADB with PEFT:
from peft import PeftModel from transformers import AutoModelForCausalLM base_model = AutoModelForCausalLM.from_pretrained("unsloth/gemma-4-E4B-it-unsloth-bnb-4bit") model = PeftModel.from_pretrained(base_model, "Muneeshk/DroidADB") - Transformers
How to use Muneeshk/DroidADB with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="Muneeshk/DroidADB") messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# pip install -U transformers accelerate # Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("Muneeshk/DroidADB", device_map="auto") - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use Muneeshk/DroidADB with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "Muneeshk/DroidADB" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "Muneeshk/DroidADB", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/Muneeshk/DroidADB
- SGLang
How to use Muneeshk/DroidADB 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 "Muneeshk/DroidADB" \ --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": "Muneeshk/DroidADB", "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 "Muneeshk/DroidADB" \ --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": "Muneeshk/DroidADB", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Unsloth Desktop
- Docker Model Runner
How to use Muneeshk/DroidADB with Docker Model Runner:
docker model run hf.co/Muneeshk/DroidADB
|
Download README.md from Muneeshk/DroidADB: direct link, hf CLI and curl.
- Browser
- Download file 5.36 kB
-
https://huggingface.co/Muneeshk/DroidADB/resolve/main/README.md
- Command line
-
hf download hf://Muneeshk/DroidADB/README.md
-
curl -L -o README.md https://huggingface.co/Muneeshk/DroidADB/resolve/main/README.md
5.36 kB
| base_model: unsloth/gemma-4-E4B-it-unsloth-bnb-4bit | |
| library_name: peft | |
| pipeline_tag: text-generation | |
| language: | |
| - en | |
| tags: | |
| - base_model:adapter:unsloth/gemma-4-E4B-it-unsloth-bnb-4bit | |
| - lora | |
| - sft | |
| - transformers | |
| - trl | |
| - unsloth | |
| - gemma | |
| - android | |
| - adb | |
| - function-calling | |
| - tool-use | |
| # DroidADB: Gemma 4 E4B LoRA for Android/ADB Tool Calling | |
| DroidADB is a LoRA adapter for Gemma 4 E4B Instruct. It chats normally, and when a request involves Android or ADB it calls an `adb` function tool instead of just printing a command. This is a personal project, trained on a personal Google Colab T4 GPU. It isn't affiliated with or funded by any organization. | |
| ## Model Details | |
| ### Model Description | |
| This adapter was trained with supervised fine-tuning (SFT) using Unsloth and TRL. It uses Gemma 4's native function-calling format. Each training conversation has this shape: | |
| user request → `adb` tool call → tool result → final assistant reply | |
| A small set of general chat examples was mixed in so the model can still hold a normal conversation. | |
| - **Developed by:** Muneesh Kanimbakam | |
| - **Funded by:** Self-funded (personal project) | |
| - **Shared by:** Muneesh Kanimbakam | |
| - **Model type:** Causal LM, LoRA adapter (PEFT), function-calling / tool-use | |
| - **Language(s):** English | |
| - **License:** <TODO: must match the base Gemma 4 license> | |
| - **Finetuned from model:** `unsloth/gemma-4-E4B-it`, loaded in 4-bit (resolved to `unsloth/gemma-4-E4B-it-unsloth-bnb-4bit`) | |
| ### Model Sources | |
| - **Repository:** https://huggingface.co/<HF_USERNAME>/<MODEL_NAME> | |
| ## Uses | |
| ### Direct Use | |
| - Turning natural-language Android requests into `adb` tool calls, e.g. "list installed packages", "show device logs", "get the battery status" | |
| - General conversation, such as simple explanations, planning and summaries | |
| - Serving as the model in a host app's tool loop: the host runs the tool and the model answers using the tool result | |
| ### Downstream Use | |
| - Plugging into any agent framework that supports OpenAI/Gemma-style function tools | |
| - Adding more tools through a tool registry (`register_tool`) without retraining | |
| - Exporting to GGUF (`q4_k_m`) for llama.cpp or Ollama | |
| ### Out-of-Scope Use | |
| - Running ADB commands automatically without a human approving them | |
| - Rooting a device, modifying system partitions, or bypassing device security | |
| - Production device management, or any high-stakes or safety-critical use | |
| - Non-Android technical tasks that need expert accuracy | |
| ## Bias, Risks, and Limitations | |
| - **Risk of wrong commands:** the model may produce ADB commands that are incorrect, outdated, or harmful. Always review a command before running it. | |
| - **The adapter itself doesn't execute anything.** Safety comes from the host runtime. The reference runtime in the notebook: | |
| - dry-runs by default (`ALLOW_COMMAND_EXECUTION = False`) | |
| - accepts only commands that start with `adb` | |
| - blocks shell operators (`|`, `;`, `&&`, `||`, `>`, `>>`) and runs without `shell=True` | |
| - asks for confirmation before risky commands (`install`, `uninstall`, `rm`, `mv`, `reboot`, `settings put`, `chmod`, `chown`, `su`, `wipe`, `format`, `pm clear`) | |
| - **Synthetic tool results:** in training, every tool result was a placeholder that said the command was not executed. The model never saw real device output, so it may handle real outputs poorly. | |
| - **Limited general chat:** only 4 general-chat examples were included, so conversational quality relies mostly on the base model. | |
| - Inherits the biases and limitations of the base Gemma model. 4-bit quantization may slightly reduce quality. | |
| ### Recommendations | |
| Keep execution turned off by default. Require a human to approve each command, and pin the target device (`ADB_SERIAL`). Prefer read-only diagnostic commands. | |
| ## How to Get Started with the Model | |
| ```python | |
| from unsloth import FastModel | |
| from unsloth.chat_templates import get_chat_template | |
| model, tokenizer = FastModel.from_pretrained( | |
| model_name=""Muneeshk/gemma-4-adb-agent"", | |
| max_seq_length=4096, | |
| load_in_4bit=True, | |
| ) | |
| tokenizer = get_chat_template(tokenizer, chat_template="gemma-4") | |
| FastModel.for_inference(model) | |
| ADB_TOOL = { | |
| "type": "function", | |
| "function": { | |
| "name": "adb", | |
| "description": "Run one Android Debug Bridge command on an explicitly selected device.", | |
| "parameters": { | |
| "type": "object", | |
| "properties": { | |
| "command": {"type": "string", "description": "Full command beginning with adb. Never include a shell pipeline."}, | |
| "confirm": {"type": "boolean", "description": "Set true only after user explicitly confirms a risky command."}, | |
| }, | |
| "required": ["command"], | |
| }, | |
| }, | |
| } | |
| messages = [ | |
| {"role": "system", "content": "You are DroidADB, a friendly general-purpose assistant with strong Android and ADB expertise."}, | |
| {"role": "user", "content": "How do I list all installed Android packages?"}, | |
| ] | |
| inputs = tokenizer.apply_chat_template( | |
| messages, tools=[ADB_TOOL], tokenize=True, add_generation_prompt=True, | |
| return_dict=True, return_tensors="pt", | |
| ).to(model.device) | |
| out = model.generate(**inputs, max_new_tokens=256, do_sa**le=True, | |
| tem**rature=1.0, top_p=0.95, top_k=64,**se_cache=True) | |
| print(tokenizer.de**de(out[0][inputs["input_ids"].shape[-1\]:], skip_special_tokens=Fals**) |