--- license: llama3.2 base_model: unsloth/Llama-3.2-3B-Instruct-bnb-4bit library_name: transformers tags: - sft - trl - unsloth - fitness - nutrition - coaching - conversational - merged datasets: - Harsh-k-007/fitcoach-conversations pipeline_tag: text-generation --- # FitCoach 3B (Merged, fp16) A fully merged, full-precision (fp16) fine-tune of Llama 3.2 3B Instruct, acting as **FitCoach** — a conversational fitness and nutrition intake coach. This is the lightweight option in the FitCoach model family, alongside the [8B LoRA adapter](https://huggingface.co/Harsh-k-007/fitcoach-8b-adapter). Try it live: [FitCoach Space](https://huggingface.co/spaces/Harsh-k-007/fitcoach) ## Model Details - **Base model:** `unsloth/Llama-3.2-3B-Instruct-bnb-4bit` (loaded in 4-bit for training via Unsloth, then merged to 16-bit for deployment) - **Format:** merged weights, fp16 — no adapter required, load directly - **Adapter (during training):** LoRA, rank 16, alpha 16, dropout 0, targeting all attention and MLP projection layers (`q/k/v/o_proj`, `gate/up/down_proj`) - **Training framework:** Unsloth `FastLanguageModel` + TRL `SFTTrainer` - **Training data:** [`Harsh-k-007/fitcoach-conversations`](https://huggingface.co/datasets/Harsh-k-007/fitcoach-conversations) — 1,407 synthetic coaching conversations (95/5 train/eval split for this run) - **Sequence length:** 2048 tokens, with sequence packing (`bfd` strategy) - **Precision:** bf16 training on a single T4 GPU (Google Colab free tier) - **Epochs:** 2, effective batch size 8 (2 × 4 grad accumulation), cosine LR schedule, peak LR 2e-4 ## Intended Use FitCoach is a **conversational intake coach** for fitness and nutrition. Given a user's goal, it asks **one question at a time** to gather the relevant context, then generates a structured plan. Scope is intentionally narrow: - **Meal plans** (~60% of training data): collects goal, age/height/weight, dietary restrictions, activity level - **Workout plans** (~40% of training data): collects goal, experience level, days per week, equipment access The 3B model is intended as a **lighter, faster** alternative to the 8B adapter — useful where latency or memory matters more than maximum response quality. ### Out of scope - Injuries, medical conditions, or any medical advice - Macro/calorie arithmetic — the model can *describe* macro targets conceptually but is **not reliable at computing them**; treat any numeric macro breakdown as approximate, not verified - Unprompted macro generation — the model does not currently generate macros unless explicitly asked (known dataset gap, planned for v2) ## How to Use ```python from transformers import AutoModelForCausalLM, AutoTokenizer import torch model_id = "Harsh-k-007/fitcoach-3b" tokenizer = AutoTokenizer.from_pretrained(model_id) tokenizer.pad_token = "<|finetune_right_pad_id|>" model = AutoModelForCausalLM.from_pretrained( model_id, dtype=torch.float16, device_map="auto", ) model.eval() messages = [ {"role": "system", "content": "You are FitCoach, a friendly fitness and nutrition coach."}, {"role": "user", "content": "Create a simple fat-loss meal plan with Indian food options."}, ] encoded = tokenizer.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt") input_ids = encoded["input_ids"] if hasattr(encoded, "keys") else encoded input_ids = input_ids.to(model.device) output = model.generate( input_ids, max_new_tokens=512, do_sample=True, temperature=0.7, top_p=0.9, pad_token_id=128004, ) print(tokenizer.decode(output[0][input_ids.shape[-1]:], skip_special_tokens=True)) ``` ## Training Procedure - **Method:** Supervised fine-tuning (SFT) with TRL `SFTTrainer`, using Unsloth's `FastLanguageModel` for memory-efficient LoRA training (gradient checkpointing via `use_gradient_checkpointing="unsloth"`), then merged to full precision via `save_pretrained_merged(..., save_method="merged_16bit")` - **Loss:** full-conversation loss (`train_on_responses_only` / assistant-only masking was not applied in this run — a documented future optimization once reliably supported for the Llama 3 chat template) - **Chat template:** Llama 3.2 (`unsloth.chat_templates.get_chat_template`) - **Optimizer:** `adamw_8bit`, weight decay 0.01, cosine schedule, 17 warmup steps - **Hardware:** Google Colab T4 (free tier), with Drive checkpointing for resumability across the 90-minute idle / 12-hour session limits ## Known Limitations - **Macro arithmetic is hallucinated.** The model isn't reliable at computing calorie/macro numbers. A v2 release plans to add a calculator/tool layer for this. - **Macros aren't generated unprompted.** The dataset under-represents this, so the model needs to be asked explicitly. Planned fix for v2 via dataset augmentation. - **No assistant-only loss** in this training run (see above). - As the smaller model in the family, expect slightly less consistent intake behavior and plan structure compared to the 8B adapter. ## Citation If you use this model, please link back to this repo and the [training dataset](https://huggingface.co/datasets/Harsh-k-007/fitcoach-conversations).