Text Generation
Transformers
Safetensors
English
lfm2
trl
openenv
harbor
agent
smoldataenvs
grpo
opencode
conversational
Eval Results (legacy)
Instructions to use FineEnvs/LFM2.5-2.6B-opencode-RL with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use FineEnvs/LFM2.5-2.6B-opencode-RL with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="FineEnvs/LFM2.5-2.6B-opencode-RL") messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# pip install -U transformers accelerate # Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("FineEnvs/LFM2.5-2.6B-opencode-RL") model = AutoModelForCausalLM.from_pretrained("FineEnvs/LFM2.5-2.6B-opencode-RL", device_map="auto") messages = [ {"role": "user", "content": "Who are you?"}, ] inputs = tokenizer.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=256) print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use FineEnvs/LFM2.5-2.6B-opencode-RL with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "FineEnvs/LFM2.5-2.6B-opencode-RL" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "FineEnvs/LFM2.5-2.6B-opencode-RL", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/FineEnvs/LFM2.5-2.6B-opencode-RL
- SGLang
How to use FineEnvs/LFM2.5-2.6B-opencode-RL with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "FineEnvs/LFM2.5-2.6B-opencode-RL" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "FineEnvs/LFM2.5-2.6B-opencode-RL", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "FineEnvs/LFM2.5-2.6B-opencode-RL" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "FineEnvs/LFM2.5-2.6B-opencode-RL", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use FineEnvs/LFM2.5-2.6B-opencode-RL with Docker Model Runner:
docker model run hf.co/FineEnvs/LFM2.5-2.6B-opencode-RL
File size: 8,958 Bytes
99b036c 4ccb424 a0bcdab 4ccb424 a0bcdab 4ccb424 99b036c | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 | ---
base_model: LiquidAI/LFM2.5-2.6B
base_model_relation: finetune
library_name: transformers
pipeline_tag: text-generation
language:
- en
license: other
tags:
- trl
- openenv
- harbor
- agent
- smoldataenvs
- grpo
- opencode
datasets:
- FineEnvs/SmolDataEnvs-harbor-train
thumbnail: https://huggingface.co/spaces/AdithyaSK/multi-harness-rl/resolve/main/app/public/og/og-image.png
model-index:
- name: LFM2.5-2.6B-opencode-RL (main, step 1000)
results:
- task:
type: text-generation
name: Agentic data analysis
dataset:
type: FineEnvs/SmolDataEnvs-harbor-test
name: SmolDataEnvs (250 fixed test tasks)
split: test
args:
harness: all four
metrics:
- type: pass_at_1
name: Pass@1 (%) — Overall
value: 52.3
- task:
type: text-generation
name: Agentic data analysis
dataset:
type: FineEnvs/SmolDataEnvs-harbor-test
name: SmolDataEnvs (250 fixed test tasks)
split: test
args:
harness: opencode
metrics:
- type: pass_at_1
name: Pass@1 (%) — OpenCode
value: 58.0
- task:
type: text-generation
name: Agentic data analysis
dataset:
type: FineEnvs/SmolDataEnvs-harbor-test
name: SmolDataEnvs (250 fixed test tasks)
split: test
args:
harness: claude-code
metrics:
- type: pass_at_1
name: Pass@1 (%) — Claude Code
value: 42.0
- task:
type: text-generation
name: Agentic data analysis
dataset:
type: FineEnvs/SmolDataEnvs-harbor-test
name: SmolDataEnvs (250 fixed test tasks)
split: test
args:
harness: codex
metrics:
- type: pass_at_1
name: Pass@1 (%) — Codex
value: 43.2
- task:
type: text-generation
name: Agentic data analysis
dataset:
type: FineEnvs/SmolDataEnvs-harbor-test
name: SmolDataEnvs (250 fixed test tasks)
split: test
args:
harness: mini-swe-agent
metrics:
- type: pass_at_1
name: Pass@1 (%) — Mini-SWE-Agent
value: 66.0
license_name: lfm1.0
license_link: LICENSE
---
[](https://huggingface.co/spaces/AdithyaSK/multi-harness-rl)
# LFM2.5-2.6B-opencode-RL
A full fine-tune of [LiquidAI/LFM2.5-2.6B](https://huggingface.co/LiquidAI/LFM2.5-2.6B) for agentic data-analysis tasks, trained with asynchronous GRPO (TRL Async GRPO) using **OpenCode**. This release is **step 1,000** on **`main`**, scoring **52.3% pass@1** across four evaluation harnesses.
[Article](https://huggingface.co/spaces/AdithyaSK/multi-harness-rl) · [Collection](https://huggingface.co/collections/FineEnvs/multi-harness-rl-6abdfaaa8d74dacd481d5212) · [Evaluation tasks](https://huggingface.co/datasets/FineEnvs/SmolDataEnvs-harbor-test) · [Training dashboard](https://huggingface.co/spaces/FineEnvs/data-agent-training-comparison-trackio)
## Training and evaluation curves
[](https://huggingface.co/spaces/AdithyaSK/multi-harness-rl)
Training curves use a trailing 50-step mean (at least 10 observations). Evaluation markers show measured checkpoints; hollow markers and dotted segments indicate incomplete coverage. Faint background lines show the full recorded trajectory; colored lines reveal the measured checkpoints. The first frame shows the completed chart before replaying, so previews also contain the full curves. Tool-call savings compare tasks solved by both the base model and checkpoint, with a different matched cohort at each checkpoint. The animation stops at this revision's step 1,000.
[Static chart](https://huggingface.co/FineEnvs/LFM2.5-2.6B-opencode-RL/resolve/main/assets/curves.png) · [Plotted data](https://huggingface.co/FineEnvs/LFM2.5-2.6B-opencode-RL/resolve/main/assets/curves.json) · [Interactive article](https://huggingface.co/spaces/AdithyaSK/multi-harness-rl)
## Training
TRL Async GRPO with **correctness plus a tool-call efficiency bonus**, initialized from the base model. All training rollouts use OpenCode. Rollouts run through OpenEnv × Harbor in E2B sandboxes.
| Setting | Value |
|---|---|
| Training task pool | 1,000 tasks: 400 medium / 600 hard |
| Checkpoint | 1,000 optimizer steps |
| Learning rate | 3e-6 |
| Rollouts per GRPO group / maximum staleness | 8 / 4 optimizer steps |
| Optimizer / precision | paged AdamW 8-bit / bfloat16 |
| Training harnesses | OpenCode |
| Sampling temperature / top-p | 0.8 / 1.0 |
| Per-call output budget, training / evaluation | 4,096 / 4,096 tokens |
The reward is `correctness × (1 + 0.1 × 15 / (15 + tool_calls))`, using verified native harness action counts. Incorrect answers receive zero; missing or unverified action counts receive no efficiency bonus. Reported pass@1 measures correctness only. The 1,000-task pool is not a claim that every task contributed an optimizer update.
## Evaluation
250 fixed SmolDataEnvs test tasks (33 easy, 118 medium, 99 hard), each evaluated under four harnesses: **1,000 graded task/harness cells**. Pass@1 uses the first graded attempt per cell; infrastructure retries do not turn it into pass@k. All cells below are graded.
| Harness | Correct / evaluated | Pass@1 |
|---|---:|---:|
| OpenCode | 145 / 250 | 58.0% |
| Claude Code | 105 / 250 | 42.0% |
| Codex | 108 / 250 | 43.2% |
| Mini-SWE-Agent | 165 / 250 | 66.0% |
| **Overall** | **523 / 1,000** | **52.3%** |
Harness versions: OpenCode 1.18.31, Claude Code 2.1.270, Codex 0.154.0, Mini-SWE-Agent 2.4.6. Full scores, including difficulty breakdowns, are in [eval_results.json](eval_results.json).
The [main branch](https://huggingface.co/FineEnvs/LFM2.5-2.6B-opencode-RL/tree/main) contains the final step-1,000 checkpoint (52.3%). The [step-900 branch](https://huggingface.co/FineEnvs/LFM2.5-2.6B-opencode-RL/tree/step-900) contains the best observed checkpoint (52.4%), used in the article's SFT-versus-RL comparison. **Best checkpoint selection used this test set**, not a separate validation set.
These are single-run results on a specific task set and harness versions. Harness mix, training exposure and compute differ across runs; the scores do not isolate a causal effect of the harness or objective.
## Load the checkpoint
The repository contains full saved model weights and the saved tokenizer/chat template, not a LoRA adapter. Training used Transformers 5.14.1; use a compatible Transformers release.
```python
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
model_id = "FineEnvs/LFM2.5-2.6B-opencode-RL"
revision = "main"
tokenizer = AutoTokenizer.from_pretrained(model_id, revision=revision)
model = AutoModelForCausalLM.from_pretrained(
model_id, revision=revision, dtype=torch.bfloat16, device_map="auto"
)
```
Reproducing the task scores requires the agent harness and tools described in the [article](https://huggingface.co/spaces/AdithyaSK/multi-harness-rl); a plain chat prompt is not the same evaluation.
## Related releases
- [LFM2.5-2.6B-multiharness-RL](https://huggingface.co/FineEnvs/LFM2.5-2.6B-multiharness-RL)
- [LFM2.5-2.6B-opencode-RL](https://huggingface.co/FineEnvs/LFM2.5-2.6B-opencode-RL)
- [LFM2.5-2.6B-multiharness-SFT](https://huggingface.co/FineEnvs/LFM2.5-2.6B-multiharness-SFT)
- [LFM2.5-2.6B-opencode-SFT](https://huggingface.co/FineEnvs/LFM2.5-2.6B-opencode-SFT)
- [Qwen3.5-2B-multiharness-RL](https://huggingface.co/FineEnvs/Qwen3.5-2B-multiharness-RL)
- [Qwen3.5-2B-opencode-RL](https://huggingface.co/FineEnvs/Qwen3.5-2B-opencode-RL)
- [Qwen3.5-2B-opencode-standalone-RL](https://huggingface.co/FineEnvs/Qwen3.5-2B-opencode-standalone-RL)
All models, datasets, environments and the article are linked in the [multi-harness RL collection](https://huggingface.co/collections/FineEnvs/multi-harness-rl-6abdfaaa8d74dacd481d5212).
## License and provenance
Derived from [LiquidAI/LFM2.5-2.6B](https://huggingface.co/LiquidAI/LFM2.5-2.6B) under the LFM Open License v1.0. The base model's license is included unchanged in [LICENSE](LICENSE). FineEnvs modified the weights by reinforcement learning; this is not an official Liquid AI release. See [NOTICE](NOTICE) and [release_manifest.json](release_manifest.json) for modification notices, the pinned base revision, checkpoint identity and file checksums. Optimizer, scheduler, RNG and trainer state are excluded.
## Citation
For the experiment, methodology and interpretation, cite the [main article](https://huggingface.co/spaces/AdithyaSK/multi-harness-rl):
```bibtex
@misc{kolavi2026multiharnessrl,
author = {Adithya S Kolavi},
title = {The ultimate guide to multi-harness RL},
year = {2026},
url = {https://huggingface.co/spaces/AdithyaSK/multi-harness-rl}
}
```
|