How to use from
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
Quick Links

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

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

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
-
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for Muneeshk/DroidADB

Adapter
(24)
this model