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
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?"
}
]
}'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 tounsloth/gemma-4-E4B-it-unsloth-bnb-4bit)
Model Sources
- Repository: https://huggingface.co//
Uses
Direct Use
- Turning natural-language Android requests into
adbtool 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 withoutshell=True - asks for confirmation before risky commands (
install,uninstall,rm,mv,reboot,settings put,chmod,chown,su,wipe,format,pm clear)
- dry-runs by default (
- 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
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**)
- Downloads last month
- -
Model tree for Muneeshk/DroidADB
Base model
google/gemma-4-E4B
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?" } ] }'