Skip to page content
SAVRN
Search Plan a project

Open-weight model · Text generation

SajiloFit-FitnessAndNutrition-Qwen2.5-Finetuned

by Bibek sapkota Bibek111/SajiloFit-FitnessAndNutrition-Qwen2.5-Finetuned

SajiloFit-FitnessAndNutrition-Qwen2.5-Finetuned is an open-weight model for text generation from Bibek sapkota, released under Apache License 2.0. Its published files total 56.3 MB. It draws 24 downloads a month.

This repository contains the selected PEFT LoRA adapter for SajiloFit AI, an English-language fitness and general nutrition assistant built on top of Qwen/Qwen2.5-7B-Instruct. This is an adapter-only repository.

Parameters—
Context—
Weights40.4 MB
Licenseapache-2.0
AccessOpen weights
Monthly Downloads24

Model Card

By Bibek sapkota, published under apache-2.0, revision 5161a7c94de2.

This repository contains the selected PEFT LoRA adapter for SajiloFit AI, an English-language fitness and general nutrition assistant built on top of Qwen/Qwen2.5-7B-Instruct. This is an adapter-only repository. It does not contain the complete Qwen2.5-7B model weights. To use it, load the Qwen base model first and then attach this adapter with PEFT. During QLoRA training, the base model is loaded in a quantized form to reduce GPU-memory use while the LoRA parameters are trained. The uploaded artifact is a LoRA adapter and can be attached to either a normal BF16/FP16 base model or a compatible 4-bit base-model load. The adapter is intended to improve Qwen's behaviour for SajiloFit tasks…

Read Bibek sapkota's full model card

SajiloFit AI — Qwen2.5-7B-Instruct LoRA Adapter

This repository contains the selected PEFT LoRA adapter for SajiloFit AI, an English-language fitness and general nutrition assistant built on top of Qwen/Qwen2.5-7B-Instruct.

This is an adapter-only repository. It does not contain the complete Qwen2.5-7B model weights. To use it, load the Qwen base model first and then attach this adapter with PEFT.

Model details

Item Value
Base model Qwen/Qwen2.5-7B-Instruct
Selected adapter SajiloFit v13 checkpoint-40
Architecture Causal language model with PEFT LoRA
Training method QLoRA-style parameter-efficient supervised fine-tuning
Language English
PEFT task type CAUSAL_LM
LoRA rank 16
LoRA alpha 32
LoRA dropout 0.05
Target modules q_proj, k_proj, v_proj, o_proj
Adapter repository Bibek111/sajilofit-qwen2.5-7b-v13-ckpt40-lora

During QLoRA training, the base model is loaded in a quantized form to reduce GPU-memory use while the LoRA parameters are trained. The uploaded artifact is a LoRA adapter and can be attached to either a normal BF16/FP16 base model or a compatible 4-bit base-model load.

Intended use

The adapter is intended to improve Qwen's behaviour for SajiloFit tasks, including:

  • answering general fitness questions;
  • explaining exercise technique;
  • producing and modifying workout plans;
  • respecting equipment, schedule and exercise constraints;
  • explaining progression, recovery and exercise substitutions;
  • providing general nutrition guidance and meal suggestions;
  • interpreting verified nutrition values supplied by an application backend;
  • asking for essential missing information instead of inventing precise values;
  • responding cautiously to safety, medical and allergy-related questions; and
  • explaining confirmed SajiloFit application results without claiming actions that did not occur.

The model is designed as one component of an application. Calculations, database operations, authentication, video analysis and plan-saving actions should be performed by trusted backend services. The model should explain their confirmed results rather than pretending to perform those operations itself.

Installation

Install PyTorch for your platform, followed by the required Hugging Face libraries:

pip install -U "transformers>=4.37" peft accelerate safetensors

For 4-bit loading on a supported NVIDIA CUDA environment, also install BitsAndBytes:

pip install -U "bitsandbytes>=0.46.1"

Recommended system prompt

Use the exact system_prompt.txt distributed with the adapter when it is available. A shorter compatible prompt is shown below for demonstration:

You are SajiloFit AI, an English-language fitness and general nutrition assistant. Follow the user's stated profile and constraints, preserve verified values exactly, and ask for essential missing information rather than inventing precise personal values. Do not claim to see videos, access accounts, save plans or complete application actions unless a confirmed backend result is supplied. Do not diagnose illness or replace a qualified healthcare professional. Escalate urgent warning signs appropriately.

For reproducible comparisons, keep the system prompt, tokenizer, prompt template and generation configuration identical across the base model and adapter.

Usage: standard BF16/FP16 loading

Use this approach when the GPU has enough memory for the non-quantized base model.

from pathlib import Path

import torch
from huggingface_hub import hf_hub_download
from peft import PeftModel
from transformers import AutoModelForCausalLM, AutoTokenizer

BASE_MODEL = "Qwen/Qwen2.5-7B-Instruct"
ADAPTER_MODEL = "Bibek111/sajilofit-qwen2.5-7b-v13-ckpt40-lora"

tokenizer = AutoTokenizer.from_pretrained(
    BASE_MODEL,
    trust_remote_code=True,
)

if tokenizer.pad_token_id is None:
    tokenizer.pad_token = tokenizer.eos_token

compute_dtype = (
    torch.bfloat16
    if torch.cuda.is_available() and torch.cuda.is_bf16_supported()
    else torch.float16
)

base_model = AutoModelForCausalLM.from_pretrained(
    BASE_MODEL,
    torch_dtype=compute_dtype,
    device_map="auto",
    trust_remote_code=True,
)

model = PeftModel.from_pretrained(
    base_model,
    ADAPTER_MODEL,
    is_trainable=False,
)
model.eval()

try:
    prompt_path = hf_hub_download(
        repo_id=ADAPTER_MODEL,
        filename="system_prompt.txt",
    )
    SYSTEM_PROMPT = Path(prompt_path).read_text(encoding="utf-8").strip()
except Exception:
    SYSTEM_PROMPT = (
        "You are SajiloFit AI, an English-language fitness and general "
        "nutrition assistant. Follow explicit constraints, preserve verified "
        "values exactly, ask for essential missing information, and do not "
        "provide medical diagnosis or invent application results."
    )


def ask_sajilofit(question: str, max_new_tokens: int = 500) -> str:
    messages = [
        {"role": "system", "content": SYSTEM_PROMPT},
        {"role": "user", "content": question},
    ]

    prompt = tokenizer.apply_chat_template(
        messages,
        tokenize=False,
        add_generation_prompt=True,
    )

    inputs = tokenizer(
        prompt,
        return_tensors="pt",
        add_special_tokens=False,
    ).to(model.device)

    with torch.inference_mode():
        output = model.generate(
            **inputs,
            max_new_tokens=max_new_tokens,
            do_sample=False,
            repetition_penalty=1.0,
            use_cache=True,
            eos_token_id=tokenizer.eos_token_id,
            pad_token_id=tokenizer.pad_token_id,
        )

    generated_ids = output[0, inputs["input_ids"].shape[1]:]
    return tokenizer.decode(
        generated_ids,
        skip_special_tokens=True,
    ).strip()


answer = ask_sajilofit(
    "Create a beginner three-day full-body routine using adjustable "
    "dumbbells, with about 40 minutes available per workout."
)
print(answer)

Usage: 4-bit loading

This version reduces GPU-memory use. BitsAndBytes 4-bit loading is primarily intended for a supported NVIDIA CUDA environment.

import torch
from peft import PeftModel
from transformers import (
    AutoModelForCausalLM,
    AutoTokenizer,
    BitsAndBytesConfig,
)

BASE_MODEL = "Qwen/Qwen2.5-7B-Instruct"
ADAPTER_MODEL = "Bibek111/sajilofit-qwen2.5-7b-v13-ckpt40-lora"

assert torch.cuda.is_available(), "Use a CUDA GPU for this 4-bit example."

compute_dtype = (
    torch.bfloat16
    if torch.cuda.is_bf16_supported()
    else torch.float16
)

quantization_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=compute_dtype,
    bnb_4bit_use_double_quant=True,
)

tokenizer = AutoTokenizer.from_pretrained(
    BASE_MODEL,
    trust_remote_code=True,
)

if tokenizer.pad_token_id is None:
    tokenizer.pad_token = tokenizer.eos_token

base_model = AutoModelForCausalLM.from_pretrained(
    BASE_MODEL,
    quantization_config=quantization_config,
    device_map="auto",
    torch_dtype=compute_dtype,
    trust_remote_code=True,
)

model = PeftModel.from_pretrained(
    base_model,
    ADAPTER_MODEL,
    is_trainable=False,
)
model.eval()
model.config.use_cache = True
model.config.eos_token_id = tokenizer.eos_token_id
model.config.pad_token_id = tokenizer.pad_token_id

messages = [
    {
        "role": "system",
        "content": (
            "You are SajiloFit AI, an English-language fitness and general "
            "nutrition assistant. Follow constraints, preserve supplied "
            "verified values, and do not invent missing information."
        ),
    },
    {
        "role": "user",
        "content": (
            "My target range is 8 to 12 repetitions. I completed "
            "12, 10 and 9 repetitions. Should I increase the weight?"
        ),
    },
]

text = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True,
)
inputs = tokenizer(
    text,
    return_tensors="pt",
    add_special_tokens=False,
).to(model.device)

with torch.inference_mode():
    output = model.generate(
        **inputs,
        max_new_tokens=400,
        do_sample=False,
        repetition_penalty=1.0,
        use_cache=True,
        eos_token_id=tokenizer.eos_token_id,
        pad_token_id=tokenizer.pad_token_id,
    )

new_tokens = output[0, inputs["input_ids"].shape[1]:]
print(tokenizer.decode(new_tokens, skip_special_tokens=True).strip())

Multi-turn conversation

Retain earlier messages when continuing a conversation:

messages = [
    {"role": "system", "content": SYSTEM_PROMPT},
    {
        "role": "user",
        "content": "I train twice per week and have adjustable dumbbells.",
    },
    {
        "role": "assistant",
        "content": "Understood. I will use two weekly sessions and dumbbells.",
    },
    {
        "role": "user",
        "content": "Correction: I can train three times per week.",
    },
]

The application should supply only relevant conversation history and confirmed profile data. Do not rely on the model to retrieve account information by itself.

Deterministic inference settings

The selected checkpoint was evaluated with deterministic decoding. Recommended settings are:

generation_settings = {
    "do_sample": False,
    "repetition_penalty": 1.0,
    "max_new_tokens": 500,
    "use_cache": True,
}

Do not set temperature, top_p or top_k when do_sample=False. Use the same output-token budget when comparing different model variants.

Optional: merge the adapter

If a standalone merged model is required, load the base model in BF16 or FP16, attach the adapter and merge it. Avoid using a 4-bit-loaded base for this export step.

merged_model = model.merge_and_unload()
merged_model.save_pretrained(
    "sajilofit-qwen2.5-7b-v13-ckpt40-merged",
    safe_serialization=True,
)
tokenizer.save_pretrained(
    "sajilofit-qwen2.5-7b-v13-ckpt40-merged"
)

The merged model is much larger than the adapter and remains subject to the base model's licence and distribution requirements.

Training

The adapter was produced through parameter-efficient supervised fine-tuning using a QLoRA-style pipeline. Its purpose is not to teach the base model all fitness knowledge from scratch. Instead, the fine-tuning targets SajiloFit-specific behaviour, response structure, constraint following, safety boundaries and consistency.

Main LoRA configuration:

r: 16
lora_alpha: 32
lora_dropout: 0.05
bias: none
task_type: CAUSAL_LM
target_modules:
  - q_proj
  - k_proj
  - v_proj
  - o_proj

Evaluation — Base Qwen vs SajiloFit Fine-Tuned

Metric Base Qwen2.5-7B SajiloFit Fine-Tuned Improvement / Interpretation
Evaluation Loss ↓ 3.4278 2.2993 32.9% lower — better prediction of the expected fitness and nutrition responses
Perplexity ↓ 30.8087 9.9672 67.6% lower — the fine-tuned model is much less uncertain when predicting reference-answer tokens
Token Accuracy ↑ 56.10% 59.19% +3.09 percentage points — correct next token is selected more often
Top-5 Token Accuracy ↑ 78.81% 81.33% +2.52 percentage points — correct token appears more frequently among the five most likely predictions
Nutrition Arithmetic Accuracy ↑ 80% 80% No change — fine-tuning did not improve numerical calculation performance
Verified Value Preservation ↑ 100% 100% Maintained at 100% — verified values were preserved correctly
Audited Qualitative Score ↑ 4.00 / 4 4.00 / 4 Maintained maximum score — strong qualitative behaviour was preserved
Genuine Major Errors ↓ 0 0 No degradation — no genuine major errors were found after manual audit
Mean Latency ↓ 10.83 s 11.60 s +0.77 s slower on average — likely due to additional LoRA computations during inference
Median Latency ↓ 10.46 s 8.88 s 1.58 s lower median latency — typical SajiloFit responses completed faster despite the higher mean
Mean Throughput ↑ 17.33 tokens/s 12.09 tokens/s 5.24 tokens/s lower — the active LoRA adapter adds additional computation per generated token
Mean Output Length ↓ 193.83 tokens 143.35 tokens ≈26.0% shorter responses — SajiloFit produced more concise answers on average
Peak GPU Memory ↓ 5.37 GB 5.37 GB No meaningful increase — LoRA improved domain behaviour without increasing peak GPU-memory usage

Overall Result

SajiloFit fine-tuning produced the clearest improvements in evaluation loss, perplexity, token accuracy, and Top-5 token accuracy, showing stronger alignment with the expected fitness and nutrition response patterns.

The fine-tuned model maintained 100% verified-value preservation and the maximum 4.00/4 audited qualitative score, while nutrition arithmetic remained unchanged at 80%.

The main efficiency trade-off was lower token-generation throughput and a small increase in mean latency, although SajiloFit produced approximately 26% shorter responses and required essentially the same peak GPU memory as the base Qwen2.5-7B model.

Limitations

Known or possible limitations include:

  • occasional nutrition arithmetic errors;
  • mistakes in progression or recovery reasoning;
  • failures on complex or competing constraints;
  • inaccurate responses concerning allergies or medical conditions;
  • sensitivity to system-prompt and generation-setting changes;
  • possible repetition on prompts unlike the training distribution;
  • no independent access to user profiles, databases or application state;
  • no ability to inspect exercise videos unless analysis results are explicitly supplied; and
  • English-focused training and evaluation.

The model should not be treated as medically validated or as a replacement for a doctor, registered dietitian, physiotherapist or other qualified professional.

Safety and application guidance

  • Use deterministic decoding for tested production behaviour.
  • Validate generated plans and calculations before presenting them as authoritative.
  • Perform nutrition arithmetic in backend code and give the verified values to the model for explanation.
  • Keep allergy and medical-risk responses conservative.
  • Escalate urgent symptoms such as chest pressure, fainting, blue lips, stroke-like symptoms or severe breathing difficulty.
  • Do not allow the model to claim that a plan was saved, an account was accessed or a backend operation succeeded without a confirmed application result.
  • Log failures and conduct periodic human review using a frozen unseen evaluation set.

Repository files

A usable adapter repository normally includes:

adapter_config.json
adapter_model.safetensors
README.md
system_prompt.txt                 # recommended
tokenizer_config.json             # optional if unchanged
tokenizer.json                    # optional if unchanged
special_tokens_map.json           # optional if unchanged

Licence

The base model is distributed under the Apache 2.0 licence. Users must also verify the licensing and permitted use of the fine-tuning data, adapter artifacts and any application data used with the model.

Citation

If you use this adapter, cite the SajiloFit project and the Qwen2.5 base model. A repository citation can be written as:

@misc{sapkota_sajilofit_v13,
  author       = {Bibek Sapkota},
  title        = {SajiloFit AI: Qwen2.5-7B-Instruct v13 Checkpoint-40 LoRA Adapter},
  year         = {2026},
  howpublished = {Hugging Face model repository},
  url          = {https://huggingface.co/Bibek111/sajilofit-qwen2.5-7b-v13-ckpt40-lora}
}

Disclaimer

This model is provided for research, educational and application-development purposes. Its output may be incomplete or incorrect. Users are responsible for appropriate validation, monitoring, safety controls and professional review before deployment.

Identity and Version

Repository
Bibek111/SajiloFit-FitnessAndNutrition-Qwen2.5-Finetuned
Publisher
Bibek sapkota
Task
Text generation
Modality
Text
Library
peft
Parameters
Not stated by the source
Languages
en
Revision
5161a7c94de2ce0a0762bc079cd82f41f56bd27b
First published
2026-09-11
Last updated
2026-09-24

Files and Weights

10 files, 56.3 MB in total. The weights are 1 file totalling 40.4 MB in safetensors.

Weights1 file · 40.4 MB
Configuration3 files · 2.0 KB
Tokenizer4 files · 15.9 MB
Documentation1 file · 18.6 KB
Repository1 file · 1.6 KB
Every file
FileTypeSizeSHA-256
adapter_model.safetensorsWeights40.4 MB 374e2da635d4
adapter_config.jsonConfiguration808 B —
added_tokens.jsonConfiguration605 B —
special_tokens_map.jsonConfiguration613 B —
README.mdDocumentation18.6 KB —
.gitattributesRepository1.6 KB —
merges.txtTokenizer1.7 MB —
tokenizer.jsonTokenizer11.4 MB 9c5ae00e602b
tokenizer_config.jsonTokenizer7.3 KB —
vocab.jsonTokenizer2.8 MB —

License and Download

License
apache-2.0
Access
Open weights, no gate
Download size
40.4 MB
Download from Bibek sapkota

Released by Bibek sapkota through its official repository on Hugging Face. Read the license.

Built From

Memory Requirements

PrecisionWeights in memory
As published40.4 MB

Weights only, from the published parameter count; the key-value cache and runtime add to this.

Questions About SajiloFit-FitnessAndNutrition-Qwen2.5-Finetuned

Can I use SajiloFit-FitnessAndNutrition-Qwen2.5-Finetuned commercially?

Yes. SajiloFit-FitnessAndNutrition-Qwen2.5-Finetuned is released under Apache License 2.0. The Apache License 2.0 is a permissive open-source license. It permits commercial use, modification and redistribution. It requires keeping the license and copyright notices and any NOTICE file, stating significant changes, and it includes an express patent grant from contributors.

Similar Models

Model · Text generation

opt-125m

AI at Meta

OPT was first introduced in Open Pre-trained Transformer Language Models and first released in metaseq's repository on May 3rd 2022 by Meta AI. Disclaimer: The team releasing OPT wrote an official model card, which is available in Appendix D of the paper. Content from this model card has been written by the Hugging Face team. To quote the first two paragraphs of the official paper OPT was predominantly pretrained with English text, but a small amount of non-English data is still present within the training corpus via CommonCrawl. The model was pretrained using a causal language modeling (CLM) objective. OPT belongs to the same family of decoder-only models like GPT-3. As such, it was…

Open weights other 2,048 tokens transformers

Model · Text generation

Ornith-1.5-9B-GGUF

Ornith

Chirp Chirp! We are introducing Ornith-1.5, a major step toward building foundation models through end-to-end self-improvement. Ornith-1.5 extends Ornith-1.0 (which was developed on top of Qwen3.5 and Gemma4 with additional continued pretraining, mid-training, and post-training) by expanding the self-improvement loop from scaffold and rollout optimization to jointly optimizing task generation, scaffold construction, and solution rollouts. Rather than relying on a fixed set of human-curated tasks and manually designed harnesses, Ornith-1.5 continuously generates new training tasks, discovers effective strategies for solving them, and improves the policy through reinforcement learning. For…

Open weights mit transformers

Model · Text generation

Ternary-Bonsai-2-27B-gguf

Prism ML

Full 27B-class reasoning in ternary transformer weights, for llama.cpp (CUDA, Metal, CPU) - \~5.9 GB language model (down from \~54 GB FP16) — full 27B-class reasoning on a standard laptop or a single GPU - 98.2% of FP16 intelligence retained: 84.78 average across 14 thinking-mode benchmarks — far above the conventional IQ2XXS build (72.59) at about 82% of its footprint, and within 0.4 points of UD-Q4KXL at three times the footprint - Retains thinking, reasoning, and agentic behavior deep in the sub-4-bit regime, where conventional low-bit representations collapse: math within half a point of full precision (96.57), coding level with the baseline (89.42), agentic tool calling at 74.92…

Open weights apache-2.0 llama.cpp

Model · Text generation

Ornith-1.5-35B-A3B-GGUF

Ornith

Chirp Chirp! We are introducing Ornith-1.5, a major step toward building foundation models through end-to-end self-improvement. Ornith-1.5 extends Ornith-1.0 (which was developed on top of Qwen3.5 and Gemma4 with additional continued pretraining, mid-training, and post-training) by expanding the self-improvement loop from scaffold and rollout optimization to jointly optimizing task generation, scaffold construction, and solution rollouts. Rather than relying on a fixed set of human-curated tasks and manually designed harnesses, Ornith-1.5 continuously generates new training tasks, discovers effective strategies for solving them, and improves the policy through reinforcement learning. For…

Open weights mit transformers

Uncensored Qwen3.8-27B, published as GGUF quantizations with the multi token prediction (MTP) head retained and verified. Refusal behaviour has been substantially reduced, not eliminated. See Measured behaviour for the numbers. Capabilities, training data, and architecture are otherwise unchanged. - Refusal directions removed with Heretic, which co minimizes refusal count against KL divergence from the base model. No handwritten refusal removal code, no finetuning, no additional training data. - Abliteration runs at bf16 (no 4 bit quantization). the resulting LoRA is merged into the bf16 base, so the published weights are not a quantized round trip. - mtp. tensors are copied verbatim from…

Open weights apache-2.0 llama.cpp

Model · Text generation

Ornith-1.0-9B-GGUF

Ornith

Aloha! Today, we are releasing Ornith-1.0, a self-improving family of open-source models for agentic coding. This model card documents Ornith-1.0-9B, the most lightweight member of the Ornith family, designed for efficient single-GPU deployment. Ornith-1.0-9B is a dense ~9B model (≈19 GB in bf16), so it serves comfortably on a single 80GB GPU. The recipes below stand up an OpenAI-compatible server; add --tensor-parallel-size / --tp if you want to shard across more GPUs. For a quick local test (or to script offline generation), load the model directly with Transformers. Make sure you have a recent release installed — see the Transformers installation guide; Ornith-1.0-9B requires…

Open weights mit transformers