---
language:
- en
library_name: transformers
pipeline_tag: text-generation
base_model:
- LiquidAI/LFM2.5-1.2B-Instruct
tags:
- lfm2
- instruct
- chatml
- function-calling
- tool-use
- sft
- lora
- merged
datasets:
- lambda/hermes-agent-reasoning-traces
---
# AyoubChLin/LFM2.5-1.2B-hermes-agent
Merged instruction model for agentic/function-calling behavior, fine-tuned from `LiquidAI/LFM2.5-1.2B-Instruct` on Hermes agent reasoning traces.
## Model Details
- Base model: `LiquidAI/LFM2.5-1.2B-Instruct`
- Training method: Supervised Fine-Tuning (SFT) with LoRA, then merged into full weights
- Intended repo: `AyoubChLin/LFM2.5-1.2B-hermes-agent`
- Adapter used for merge: `AyoubChLin/LFM2.5-1.2B-hermes-agent-lora`
- Frameworks: `transformers`, `trl` (`SFTTrainer`), `peft`, `datasets`
## Training Data
Source dataset:
- `lambda/hermes-agent-reasoning-traces` with config `kimi`
Data preprocessing in the training notebook:
- Converted ShareGPT turns to OpenAI-style role messages (`system`, `user`, `assistant`, `tool`)
- Normalized `...` blocks into LFM tool-call format:
- `<|tool_call_start|>[...]<|tool_call_end|>`
- Normalized `...` to raw `tool` role content
- Rendered each sample to LFM2.5 ChatML with special tokens:
- `<|startoftext|>`, `<|im_start|>`, `<|im_end|>`, `<|endoftext|>`
- Filtered over-length samples with max sequence length `16,384`
Dataset counts from the run:
- Raw rows: `7,646`
- Kept after preprocessing: `4,987`
- Skipped as too long: `2,659`
- Malformed skipped: `0`
- Split: `4,887` train / `100` validation
## Training Procedure
Main hyperparameters (from W&B run `a6kutghd`):
- Epochs: `1`
- Max sequence length: `16,384`
- Packing: `True`
- Per-device batch size: `4`
- Gradient accumulation: `4`
- Optimizer: `adamw_8bit`
- Learning rate: `2e-4`
- LR scheduler: `cosine`
- Warmup ratio: `0.03`
- Weight decay: `0.01`
- Max grad norm: `1.0`
- Precision: `bf16=True`, `tf32=True`
- Gradient checkpointing: `True` (`use_reentrant=False`)
- Seed: `42`
LoRA setup:
- `r=32`, `alpha=64`, `dropout=0.05`
- Target modules: `q_proj`, `k_proj`, `v_proj`, `o_proj`, `gate_proj`, `up_proj`, `down_proj`
- `modules_to_save`: `embed_tokens`, `lm_head`
Hardware (logged by W&B metadata):
- 1x `NVIDIA B200`
- CUDA environment in Modal
## Training Results
W&B run:
- https://wandb.ai/cherguelainea/lfm25-hermes-sft/runs/a6kutghd
Final logged metrics:
- `train_loss`: `0.4654`
- `train/loss` (last logged step): `0.3460`
- `eval/loss`: `0.3581`
- `eval/mean_token_accuracy`: `0.9141`
- `train_runtime`: `945.35s` (~15.8 min)
- `train_samples_per_second`: `3.42`
- `train_steps_per_second`: `0.215`
- `eval/runtime`: `6.44s`
- `total_flos`: `3.5557e17`
- `train/global_step`: `203`
Note: W&B marks the run state as `crashed`, but training/evaluation metrics and model artifacts were logged and used for merge/push.
## Intended Use
This model is intended for:
- assistant-style chat
- agent/tool-use workflows
- function-calling style prompting and multi-turn reasoning traces
Not intended for:
- safety-critical autonomous decisions
- legal/medical/financial advice without human oversight
## Prompt Format
Use the model chat template through the tokenizer when possible.
If formatting manually, training used LFM2.5 ChatML structure with special tokens and role blocks.
## How to Use
### Inference (Transformers)
```python
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
model_id = "AyoubChLin/LFM2.5-1.2B-hermes-agent"
tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.bfloat16,
device_map="auto",
trust_remote_code=True,
)
messages = [
{"role": "user", "content": "List Python files in /workspace and count them."}
]
inputs = tokenizer.apply_chat_template(
messages,
add_generation_prompt=True,
return_tensors="pt",
).to(model.device)
with torch.no_grad():
out = model.generate(
inputs,
max_new_tokens=512,
temperature=0.6,
top_k=50,
repetition_penalty=1.05,
)
print(tokenizer.decode(out[0], skip_special_tokens=True))
```
## Limitations
- Fine-tuned on one dataset config (`kimi`) and a single training epoch.
- Strongly optimized for this trace style; may generalize unevenly to unrelated domains.
- Tool-calling behavior quality depends on prompt/tool schema quality.
## Reproducibility
Primary sources for this card:
- Training notebook: `lfm25-hermes-sft-a100-1.ipynb`
- W&B run: `cherguelainea/lfm25-hermes-sft/a6kutghd`