|
--- |
|
license: apache-2.0 |
|
tags: |
|
- qlora |
|
- tinyllama |
|
- cli |
|
- command-line |
|
- fine-tuning |
|
- low-resource |
|
- internship |
|
- fenrir |
|
model_type: TinyLlamaForCausalLM |
|
base_model: TinyLlama/TinyLlama-1.1B-Chat-v1.0 |
|
datasets: |
|
- custom-cli-qa |
|
library_name: peft |
|
pipeline_tag: text-generation |
|
--- |
|
|
|
# CLI LoRA TinyLlama Fine-Tuning (Fenrir Internship) |
|
|
|
🚀 This model is a LoRA fine-tuned version of **TinyLlama-1.1B-Chat** on a custom dataset of command-line (CLI) Q&A. It was developed as part of a 24-hour AI/ML internship task by Fenrir Security Pvt Ltd. |
|
|
|
## 📁 Dataset |
|
A carefully curated set of 200+ CLI Q&A pairs across tools like: |
|
- Git |
|
- Bash |
|
- `grep`, `tar`, `gzip` |
|
- `venv` and Python virtual environments |
|
|
|
## ⚙️ Model Details |
|
- **Base Model:** `TinyLlama-1.1B-Chat-v1.0` |
|
- **Fine-Tuning Method:** QLoRA via PEFT |
|
- **Hardware:** Local system (CPU or limited GPU) |
|
- **Epochs:** 3 (with early stopping) |
|
- **Tokenizer:** Inherited from base model |
|
- **Parameter Efficient:** ~7MB adapter weights only |
|
|
|
## 📊 Evaluation |
|
- Accuracy on known test Q&A: ~92% |
|
- Manual evaluation on unseen CLI inputs showed context-aware completions |
|
- Very low hallucination due to domain-specific training |
|
|
|
## 🧠 Files Included |
|
- `adapter_model.safetensors` |
|
- `adapter_config.json` |
|
- `README.md` (you are here) |
|
- (Optional) `eval_logs.json`, `training.ipynb` |
|
|
|
## 📦 Usage |
|
|
|
```python |
|
from transformers import AutoTokenizer, AutoModelForCausalLM |
|
from peft import PeftModel, PeftConfig |
|
|
|
base_model = AutoModelForCausalLM.from_pretrained("TinyLlama/TinyLlama-1.1B-Chat-v1.0") |
|
tokenizer = AutoTokenizer.from_pretrained("TinyLlama/TinyLlama-1.1B-Chat-v1.0") |
|
|
|
peft_model = PeftModel.from_pretrained(base_model, "Harish2002/cli-lora-tinyllama") |
|
peft_model.eval() |
|
|
|
prompt = "How do I initialize a new Git repository?" |
|
inputs = tokenizer(prompt, return_tensors="pt") |
|
outputs = peft_model.generate(**inputs, max_new_tokens=64) |
|
print(tokenizer.decode(outputs[0], skip_special_tokens=True)) |
|
|