Training pipeline
Results
Means over three evaluation seeds, identical harness for both arms (paper Table 1):
Table with columns: Setting, SWE-Bench-Verified, SWE-Bench-Lite| 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.0max_input_tokens = 147456max_output_tokens = 16384native_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}}