Instructions to use harness-hub/LFM2.5-24B-A2B-claude-code with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PEFT
How to use harness-hub/LFM2.5-24B-A2B-claude-code with PEFT:
from peft import PeftModel from transformers import AutoModelForCausalLM base_model = AutoModelForCausalLM.from_pretrained("LiquidAI/LFM2.5-24B-A2B") model = PeftModel.from_pretrained(base_model, "harness-hub/LFM2.5-24B-A2B-claude-code") - Notebooks
- Google Colab
- Kaggle
LFM2.5-24B-A2B · Harbor · Claude Code (LoRA)
A LoRA adapter for LiquidAI/LFM2.5-24B-A2B, trained with reinforcement learning to work as the model behind Claude Code on data-analysis tasks.
Each training rollout is a full Claude Code session in a remote sandbox: the agent reads the task, runs shell and Python tools against the task's data files, and answers. A verifier then grades the answer. The adapter was trained on those grades with TRL's asynchronous GRPO trainer.
In short: after 100 steps, this checkpoint performs like the base model. It is published as a starting point and a reference run, not as an improvement.
Results
Evaluated on the first 100 tasks of FineEnvs/SmolDataEnvs-harbor-test, one attempt per task at temperature 0.8. At 100 tasks, differences of up to about ±5 points are noise.
With Claude Code, the harness it was trained with
| Step | pass@1 | vs base | Tool calls per task |
|---|---|---|---|
| base | 0.68 | 6.7 | |
| 10 | 0.65 | −3 | 7.0 |
| 20 | 0.72 | +4 | 6.6 |
| 30 | 0.63 | −5 | 6.9 |
| 40 | 0.67 | −1 | 6.0 |
| 50 | TODO | ||
| 60 | 0.68 | 0 | 6.2 |
| 70 | 0.63 | −5 | 6.4 |
| 80 | 0.71 | +3 | 6.1 |
| 90 | TODO | ||
| 100 (this adapter) | TODO |
With pi, a harness it was not trained with
This adapter is the green line (claude-code) at step 100. The other lines are runs trained with pi and opencode, for
comparison:
Under pi, step 100 is −1 point on pass@1 and −2% on tool calls (on tasks both solved), against the base model: no change.
The run trained with pi at the same learning rate (orange) cut tool calls by up to 39%. The Claude Code run shows only a small drift, about −5 to −10% from step 40 on. One likely reason: Claude Code's long system prompt and fixed tool set leave the model less to learn in 100 steps. This is a hypothesis, not something these runs test.
Use with Claude Code
1. Serve the adapter with vLLM
vLLM serves the Anthropic Messages API (/v1/messages) that Claude Code speaks, so no proxy is needed:
vllm serve LiquidAI/LFM2.5-24B-A2B \
--enable-lora --max-lora-rank 32 \
--lora-modules lfm-harbor-cc=harness-hub/LFM2.5-24B-A2B-harbor-claude-code-lora \
--enable-auto-tool-choice --tool-call-parser lfm2 --reasoning-parser qwen3 \
--max-model-len 131072
Claude Code can't use model names that contain a /, hence the short adapter name lfm-harbor-cc.
2. Point Claude Code at it
ANTHROPIC_BASE_URL=http://localhost:8000 \
ANTHROPIC_API_KEY=dummy \
ANTHROPIC_AUTH_TOKEN=dummy \
ANTHROPIC_DEFAULT_OPUS_MODEL=lfm-harbor-cc \
ANTHROPIC_DEFAULT_SONNET_MODEL=lfm-harbor-cc \
ANTHROPIC_DEFAULT_HAIKU_MODEL=lfm-harbor-cc \
claude
ANTHROPIC_BASE_URLhas no/v1suffix: Claude Code appends its own path.- The key and token can be any string, but
ANTHROPIC_AUTH_TOKENmust be set. - Mapping all three model tiers to the adapter keeps Claude Code's background calls on your server too.
See vLLM's Claude Code guide for details.
Use with llama.cpp
A GGUF version of this adapter is in harness-hub/LFM2.5-24B-A2B-harbor-claude-code-lora-GGUF. It runs on top of LiquidAI's base GGUF:
hf download LiquidAI/LFM2.5-24B-A2B-GGUF LFM2.5-24B-A2B-Q8_0.gguf --local-dir .
hf download harness-hub/LFM2.5-24B-A2B-harbor-claude-code-lora-GGUF LFM2.5-24B-A2B-harbor-claude-code-lora-F16.gguf --local-dir .
llama-server -m LFM2.5-24B-A2B-Q8_0.gguf --lora LFM2.5-24B-A2B-harbor-claude-code-lora-F16.gguf \
--jinja -c 65536 --port 8080 --alias lfm-harbor-cc
--jinja is required for tool calling, and llama-server also serves /v1/messages
(announcement). Then run Claude Code with
the environment above and ANTHROPIC_BASE_URL=http://127.0.0.1:8080. The GGUF version has not been re-evaluated.
Training
| Method | AsyncGRPO (TRL, experimental), LoRA |
| Environment | Harbor tasks served by OpenEnv, rollouts in HF sandboxes |
| Harness | Claude Code, its Anthropic Messages calls translated to chat completions for vLLM by OpenEnv's capture proxy |
| Tasks | first 1,000 tasks of FineEnvs/SmolDataEnvs-harbor-train |
| Reward | the task verifier's correctness (falls back to reward) |
| Steps | 100 (this checkpoint) |
| Learning rate | 1e-5 |
| LoRA | r = 32, alpha = 64, all linear layers |
| Rollouts | 8 per task, temperature 0.8, up to 17 model calls and 600 s per rollout, 16,384 tokens per model call |
| Batch | 4 token-budgeted micro-batches per step |
| Hardware | 1× NVIDIA B300, vLLM and the trainer sharing the GPU |
The training script is
examples/async_grpo_harbor in TRL.
Limitations
- No measured gain. Every checkpoint of this run is within noise of the base model, with Claude Code and with pi.
- Small evaluation. 100 tasks put the noise on pass@1 at about ±5 points.
- One task family. Training and evaluation are both on SmolDataEnvs data-analysis tasks.
- Served differently in evaluation. The Claude Code evaluation above ran with each checkpoint merged into the base model, on vLLM 0.25.1. The pi evaluation served the adapter unmerged, as in the commands on this card. Small numeric differences between the two setups are expected.
- Downloads last month
- 16

