Text Generation
Transformers
Safetensors
qwen3
code
software-engineering
agent
conversational
text-generation-inference
FIM-8B / README.md
ubowang's picture
Add arXiv link (2607.12463)
03a854e verified
|
Raw
History Blame Contribute Delete
4.79 kB
metadata
license: apache-2.0
library_name: transformers
pipeline_tag: text-generation
base_model:
  - Qwen/Qwen3-8B
datasets:
  - TIGER-Lab/FIM-Midtraining-400K
  - SWE-Lego/SWE-Lego-Synthetic-Data
tags:
  - code
  - software-engineering
  - agent

FIM-8B

📄 Paper · 💻 GitHub · 🤗 Dataset · 🤗 Collection

FIM-8B is the strongest released model of "Function-Aware Fill-in-the-Middle as Mid-Training for Coding Agent Foundation Models": Qwen3-8B, mid-trained on function-aware FIM data, then post-trained on SWE-Lego agent trajectories. The mid-training stage is the only difference from a standard SWE-Lego reproduction — worth +3.2 points on SWE-Bench-Verified and +5.4 on SWE-Bench-Lite. Unlike FIM-7B and FIM-14B (R2E-Gym scaffold), this model is evaluated with the SWE-Lego setup: OpenHands CodeActAgent for inference and the official SWE-bench harness for scoring.

Training pipeline

Results

Means over three evaluation seeds, identical harness for both arms (paper Table 1):

Setting SWE-Bench-Verified SWE-Bench-Lite
Qwen3-8B + SWE-Lego (reproduced) 31.80 27.30
FIM-8B (+ FIM mid-training) 35.00 32.70
Δ +3.20 +5.40

Evaluate on SWE-Bench Verified

The complete pinned walkthrough lives at evaluation/swebench/released_checkpoints.md.

1. Serve the model with vLLM

The checkpoint ships max_position_embeddings: 163840 and its own chat template, so no rope or template overrides are needed:

CUDA_VISIBLE_DEVICES=0 \
python -m vllm.entrypoints.openai.api_server \
  --model TIGER-Lab/FIM-8B \
  --served-model-name FIM-8B \
  --host 127.0.0.1 \
  --port 8400 \
  --tensor-parallel-size 1 \
  --max-model-len 163840 \
  --max-num-seqs 16 \
  --gpu-memory-utilization 0.9 \
  > vllm_fim8b.log 2>&1 &

Wait until the server is up (model load takes ~1 minute):

curl -s http://127.0.0.1:8400/v1/models

2. Run the agent on SWE-Bench Verified

Inference uses OpenHands 0.53.0 with CodeActAgent. Define the LLM in config.toml:

[llm.eval_fim]
model = "openai/FIM-8B"
base_url = "http://127.0.0.1:8400/v1"
api_key = "EMPTY"
temperature = 0.0
max_input_tokens = 147456
max_output_tokens = 16384
native_tool_calling = false

From the OpenHands checkout:

env USE_HINT_TEXT=false \
    INSTRUCTION_TEMPLATE_NAME=swe_default.j2 \
    ENABLE_PLAN_MODE=false \
    ADD_IN_CONTEXT_LEARNING_EXAMPLE=false \
poetry run python evaluation/benchmarks/swe_bench/run_infer.py \
  --config-file config.toml \
  --agent-cls CodeActAgent \
  --llm-config llm.eval_fim \
  --max-iterations 100 \
  --eval-num-workers 1 \
  --eval-output-dir ./eval_out \
  --dataset princeton-nlp/SWE-bench_Verified \
  --split test \
  --mode swe

For SWE-Bench Lite, use --dataset princeton-nlp/SWE-bench_Lite.

3. Score with the SWE-bench harness

Convert the OpenHands output.jsonl to a predictions file with evaluation/benchmarks/swe_bench/scripts/eval/convert_oh_output_to_swe_json.py, then evaluate it with the official SWE-bench harness (python -m swebench.harness.run_evaluation). The reported score is resolved_instances / total_instances.

Citation

@article{wang2026fim,
  title={Function-Aware Fill-in-the-Middle as Mid-Training for Coding Agent Foundation Models},
  author={Wang, Yubo and Liang, Jiarong and Zhang, Yuxuan and Liu, Xuye and Wei, Cong and Zhang, Yuyu and Nie, Ping and Chen, Wenhu},
  journal={arXiv preprint arXiv:2607.12463},
  year={2026}
}