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:

pass@1 and tool-call change against the base model over training

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_URL has no /v1 suffix: Claude Code appends its own path.
  • The key and token can be any string, but ANTHROPIC_AUTH_TOKEN must 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
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for harness-hub/LFM2.5-24B-A2B-claude-code

Adapter
(2)
this model
Adapters
1 model

Dataset used to train harness-hub/LFM2.5-24B-A2B-claude-code

Collection including harness-hub/LFM2.5-24B-A2B-claude-code