--- 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](https://arxiv.org/abs/2607.12463) ยท [๐Ÿ’ป GitHub](https://github.com/TIGER-AI-Lab/FIM-Midtraining) ยท [๐Ÿค— Dataset](https://huggingface.co/datasets/TIGER-Lab/FIM-Midtraining-400K) ยท [๐Ÿค— Collection](https://huggingface.co/collections/TIGER-Lab/fim-midtraining) **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 - **Base model**: [`Qwen/Qwen3-8B`](https://huggingface.co/Qwen/Qwen3-8B) - **FIM mid-training**: [`midtraining/configs/fim_midtrain.yaml`](https://github.com/TIGER-AI-Lab/FIM-Midtraining/blob/main/midtraining/configs/fim_midtrain.yaml) on [TIGER-Lab/FIM-Midtraining-400K](https://huggingface.co/datasets/TIGER-Lab/FIM-Midtraining-400K) (as-run copy: [`FIM_Midtrain_8B.yaml`](https://github.com/TIGER-AI-Lab/FIM-Midtraining/blob/main/midtraining/configs/FIM_Midtrain_8B.yaml)) โ†’ intermediate checkpoint released as [TIGER-Lab/FIM-Mid-8B](https://huggingface.co/TIGER-Lab/FIM-Mid-8B) - **Post-training**: SFT on SWE-Lego trajectories (real + synthetic, `resolved`-filtered, 2 epochs) โ€” [`posttraining/swe_lego/`](https://github.com/TIGER-AI-Lab/FIM-Midtraining/tree/main/posttraining/swe_lego) (as-run copy: [`FIM_Posttrain_8B.yaml`](https://github.com/TIGER-AI-Lab/FIM-Midtraining/blob/main/posttraining/swe_lego/FIM_Posttrain_8B.yaml)) ## 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`](https://github.com/TIGER-AI-Lab/FIM-Midtraining/blob/main/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: ```bash 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): ```bash 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`: ```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: ```bash 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 ```bibtex @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} } ```