Downloads · 30 days
11
14% of all-time downloads
F-A-I-L/llama-3.2-1b-mini-agent-lora
llama-3.2-1b-mini-agent-lora is a text generation model from F-A-I-L. Use it when you need the model to write or continue text. It is set up for peft. The card lists the license as llama3.2.
The 90 MB LoRA adapter for Frost2o24/llama-3.2-1b-mini-agent, without the GGUF builds.
Downloads · 30 days
11
14% of all-time downloads
All-time downloads
77
Public
Repo size
6.6 GB
Likes
0
Public
Click a slice to open those files.
.safetensors90.2 MB · 84%
From the Hugging Face model README
The 90 MB LoRA adapter for Frost2o24/llama-3.2-1b-mini-agent,
without the GGUF builds.
This repository holds the adapter weights alone — the same tensors, byte for byte
(sha256 7b8e6efd42f8...), as the ones in the main repository. Use this one if you want to
compose the LoRA yourself (PEFT, vLLM, multi-adapter serving, or merging at your own
precision). Use the main repository
if you want ready-to-run GGUF quants from Q3_K_M to fp16.
Full model card, evaluation methodology and limitations live in the main repository. This page carries what you need to load and prompt the adapter correctly, plus the headline numbers.
| Base model | unsloth/llama-3.2-1b-instruct-unsloth-bnb-4bit (NF4 quantization of meta-llama/Llama-3.2-1B-Instruct) |
| Method | QLoRA — rank 32, alpha 32, dropout 0, bias none, use_rslora false |
| Trainable params | 22,544,384 across 224 tensors (16 layers x 7 projections x A/B) |
| Target modules | q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj |
| Trained on | function calling (xLAM), Bash (NL2SH-ALFA), Python (self-oss-instruct-sc2) |
| Training context | 1024 tokens, no packing |
| Framework | Unsloth + TRL SFTTrainer |
| License | Llama 3.2 Community License |
Measured against the base model under an identical harness and identical prompts. Tool
calling is scored on 500 xLAM rows held out by construction — training consumed
shuffle(seed=3407)[:15000], this is [15000:15500] of the same shuffle, zero id overlap
asserted at runtime. Bash and Python are executed, not string-matched.
| Benchmark | n | Base Llama-3.2-1B-Instruct | This adapter | Δ | Paired test |
|---|---|---|---|---|---|
| Tool calls — exact match | 500 | 1.8% | 80.4% | +78.6 pp | — |
| Tool calls — correct function | 500 | 2.6% | 98.0% | +95.4 pp | — |
| Tool calls — well-formed output | 500 | 8.4% | 99.2% | +90.8 pp | — |
| Bash — InterCode-ALFA, executed | 300 | 16.3% | 31.3% | +15.0 pp | McNemar p = 1.6 × 10⁻⁷ |
| HumanEval+ pass@1, executed | 164 | 28.7% | 25.0% | −3.7 pp | McNemar p = 0.41, n.s. |
Parallel calls hold up: 276 of the 500 rows need two or more calls in one reply, scoring 77.9% exact against 83.5% for single calls. The residual error is overwhelmingly argument values, not tool choice — 17.6% of replies name the right function and get a field wrong, while only 1.2% pick the wrong function.
What the adapter buys is protocol reliability: 8.4% → 99.2% well-formed output. The base model's 1.8% is not evidence it cannot select tools — it answers in prose wrapped around a differently-shaped JSON object, so the strict parser rejects 91.6% of its replies. Both models are format-bound; this adapter is bound to the format documented below.
Prompted with a tool-calling convention it was not trained on, it degrades sharply. On
BFCL v3 prompt mode — which asks for [func_name1(params_name1=...)] rather than JSON — it
scores 2.8% macro against the base model's 15.4%, because 82.7% of its outputs
echo the literal placeholder func_name1 instead of substituting the real function name.
Read that as a deployment hazard, not a capability score: drop this adapter into an agent framework that ships its own tool prompt and you get that behaviour, not the 80.4%. Full error taxonomy is in the main model card.
Use these verbatim.
Tool calling
You are a function-calling assistant. Available tools:
{tools_as_json}
Respond with a JSON list of calls.
replies [{"name": "...", "arguments": {...}}]
Bash
You are a Bash assistant. Translate the request into a single Bash command.
replies with a bare command — no fences, no prose
Python
You are a Python coding assistant. Solve the problem with correct, working code.
replies with a fenced python block
Do not use
tokenizer.apply_chat_template(..., tools=[...]). It renders Llama 3.1's stock tool prompt asking for{"name": ..., "parameters": ...}, which is not the format this adapter was trained on.
import json, torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
ADAPTER = "Frost2o24/llama-3.2-1b-mini-agent-lora"
base = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-3.2-1B-Instruct", torch_dtype=torch.bfloat16, device_map="auto")
model = PeftModel.from_pretrained(base, ADAPTER)
tok = AutoTokenizer.from_pretrained(ADAPTER)
msgs = [
{"role": "system", "content":
"You are a Bash assistant. Translate the request into a single Bash command."},
{"role": "user", "content": "list open files for process 1234"},
]
enc = tok.apply_chat_template(msgs, add_generation_prompt=True,
return_tensors="pt").to(model.device)
out = model.generate(enc, max_new_tokens=64, do_sample=False)
print(tok.decode(out[0][enc.shape[1]:], skip_special_tokens=True))
# lsof -p 1234
from unsloth import FastLanguageModel
model, tok = FastLanguageModel.from_pretrained(
"Frost2o24/llama-3.2-1b-mini-agent-lora", max_seq_length=4096, load_in_4bit=True)
FastLanguageModel.for_inference(model)
Unsloth resolves the base automatically from adapter_config.json.
merged = model.merge_and_unload()
merged.save_pretrained("llama-3.2-1b-mini-agent-merged")
The adapter was trained over an NF4 base. Merging into a bf16 base is the usual and supported path, but it is not numerically identical to training conditions; the GGUF builds in the main repository were produced this way.
| Epochs | 2 |
| LR / schedule | 2e-4, cosine, warmup ratio 0.03 |
| Batch | 2 x grad-accum 8 (effective 16) |
| Sequence | max 1024, packing=False, group_by_length=True |
| Regularization | NEFTune noise alpha 5 |
| Optimizer | paged_adamw_8bit, bf16 |
| Loss masking | train_on_responses_only — assistant turns only |
| Seed | 3407 |
Data — each source capped at 15,000 rows, concatenated, shuffled, filtered to <= 1024
tokens: xLAM function calling (shuffle(seed=3407)[:15000]); self-oss-instruct-sc2
Python filtered only on ast.parse validity; NL2SH-ALFA Bash deduplicated, cleaned and
frequency-capped at 250 per head utility; plus 60 hand-written bash/tool examples upsampled
5x.
chat_template.jinja cannot represent this model's output. It renders a prior tool
call as {"name": ..., "parameters": ...} and raises on more than one
("This model only supports single tool-calls at once!"), while the model emits a JSON
list and does produce parallel calls. Normalize the shape in your own tool loop.find-rooted
tasks.@misc{llama32_1b_mini_agent_lora,
title = {Llama Mini Agent (LoRA adapter): a 1B joint tool-calling, Bash and Python fine-tune of Llama-3.2-1B-Instruct},
author = {Frost2o24},
year = {2026},
url = {https://huggingface.co/Frost2o24/llama-3.2-1b-mini-agent-lora}
}
Llama 3.2 Community License, inherited from the base model. Derivatives must carry "Built with Llama". Training data licenses are those of the upstream sources.
The 13-run ablation this checkpoint comes from, and the evaluation sweep behind these numbers, were all produced on a single consumer laptop GPU. That is the main limit on how far the next version can go.
If your team has an NVIDIA DGX Spark or an AMD Ryzen AI Max+ ("Strix Halo") AI dev kit to spare, it would go directly into multi-turn tool data, the planned GRPO stage, and published eval numbers for the next generation of these models. Reach out via the discussions tab. No obligation either way — the weights stay freely available regardless.