فوری جواب: 2026 میں Fill-in-the-Middle (FIM) تکنیک پریفکس، سفکس اور مڈل ٹوکنز (جیسے <|fim_prefix|>، <|fim_suffix|>، <|fim_middle|>) کے ذریعے IDE میں ریئل ٹائم گھوسٹ ٹیکسٹ کوڈ آٹو کمپلیشن فراہم کرتی ہے۔ 100ms سے کم لیٹنسی میں Qwen 2.5 Coder 1.5B 42ms TTFT اور 84.6% سنگل لائن درستگی کے ساتھ سب سے آگے ہے، جبکہ Qwen 2.5 Coder 7B ملٹی لائن کوڈ بنانے میں 76.8% کے ساتھ سرفہرست ہے۔
1. تعارف: گھوسٹ ٹیکسٹ AI آٹو کمپلیشن کی رفتار اور درستگی کے تقاضے
ریئل ٹائم ai code completion اور ai autocomplete مصنوعی ذہانت میں سب سے زیادہ وقت کے حساس کام ہیں۔ چیٹ پر مبنی کوڈنگ ایجنٹس (جیسے Claude Code، Aider یا OpenCode) ملٹی فائل کاموں کے لیے 1.5 سے 5.0 سیکنڈز لے سکتے ہیں، لیکن کوڈ ایڈیٹر میں نظر آنے والی تجاویز ("گھوسٹ ٹیکسٹ") کو 100 ملی سیکنڈ سے کم وقت میں ظاہر ہونا چاہیے تاکہ ڈویلپر کی توجہ برقرار رہے۔
+-----------------------------------------------------------------------------------------------+
| IDE گھوسٹ ٹیکسٹ آٹو کمپلیشن کا لیٹنسی بجٹ |
+-----------------------------------------------------------------------------------------------+
| کی اسٹروک ڈی باؤنس : 30ms - 50ms |
| سیاق و سباق کی تیاری : 10ms - 15ms (Tree-sitter AST، پریفکس اور سفکس ونڈوئنگ) |
| نیٹ ورک / IPC ٹرانسپورٹ: 5ms - 20ms (مقامی vLLM / llama.cpp یا محفوظ ویب ساکٹ) |
| پہلے ٹوکن کا وقت : 35ms - 55ms (پہلے کریکٹر کے لیے 100ms سے کم کی حد) |
| ٹوکن اسٹریمنگ : 15ms - 25ms (120+ ٹوکن فی سیکنڈ کی رفتار سے لائن مکمل کرنا) |
+-----------------------------------------------------------------------------------------------+
| کل لیٹنسی بجٹ : 95ms - 145ms (فوری تجویز کے لیے انسانی احساس کی آخری حد) |
+-----------------------------------------------------------------------------------------------+
روایتی آٹو ریگریسیو ماڈلز صرف بائیں سے دائیں اگلا ٹوکن پیش گوئی کرنے کی تربیت رکھتے ہیں:
$$P(W) = \prod_{i=1}^{n} P(w_i \mid w_1, w_2, \dots, w_{i-1})$$
لیکن ایک حقیقی ایڈیٹر میں کرسر کے بعد پہلے سے کوڈ اور بریکٹس موجود ہوتے ہیں۔ اگر ماڈل صرف کرسر سے پہلے کا کوڈ دیکھے گا، تو وہ غیر ضروری بریکٹس اور متصادم کوڈ پیدا کرے گا۔
اس مسئلے کا حل Fill-in-the-Middle (FIM) ہے، جس میں ماڈل Prefix (پہلے کا کوڈ) اور Suffix (بعد کا کوڈ) دونوں کو مدنظر رکھ کر درمیان کا خالی حصہ (Middle) تیار کرتا ہے۔
2. فل ان دی مڈل (FIM) کا کام کرنے کا طریقہ کار
FIM تکنیک ٹرانسفارمر کی ساخت میں تبدیلی کیے بغیر ماڈل کو دونوں اطراف کے کوڈ کو سمجھنے کی صلاحیت فراہم کرتی ہے۔
+-----------------------------------------------------------------------------------------------+
| Fill-in-the-Middle (FIM) تبدیلی کا خاکہ |
+-----------------------------------------------------------------------------------------------+
| اصل کوڈ فائل کی ساخت: |
| [ کرسر سے پہلے کا کوڈ (Prefix) ] [ کرسر کا مقام (Middle) ] [ کرسر کے بعد کا کوڈ (Suffix) ] |
| |
| FIM فارمیٹ (PSM موڈ): |
| <PRE> [ پریفکس کوڈ ] <SUF> [ سفکس کوڈ ] <MID> ===> ماڈل پیش گوئی کرتا ہے [ Middle ] |
| |
| FIM فارمیٹ (SPM موڈ): |
| <SUF> [ سفکس کوڈ ] <PRE> [ پریفکس کوڈ ] <MID> ===> ماڈل پیش گوئی کرتا ہے [ Middle ] |
+-----------------------------------------------------------------------------------------------+
3. مختلف ماڈلز کے FIM اسپیشل ٹوکنز (2026)
+-------------------------------------------------------------------------------------------------------------+
| FIM اسپیشل ٹوکنز کا تقابلی جدول (2026) |
+--------------------+--------------------------+--------------------------+--------------------------+-------+
| ماڈل فیملی | پریفکس ٹوکن | سفکس ٹوکن | مڈل آغاز کا ٹوکن | موڈ |
+--------------------+--------------------------+--------------------------+--------------------------+-------+
| Qwen 2.5 Coder | <|fim_prefix|> | <|fim_suffix|> | <|fim_middle|> | PSM |
| DeepSeek Coder V1/2| <|fim begin|> | <|fim hole|> | <|fim end|> | SPM |
| StarCoder / SC2 | <fim_prefix> | <fim_suffix> | <fim_middle> | PSM |
| Mistral Codestral | [PREFIX] | [SUFFIX] | [MIDDLE] | PSM |
| CodeLlama | <PRE> | <SUF> | <MID> | PSM |
+--------------------+--------------------------+--------------------------+--------------------------+-------+
4. 100ms سے کم کے ماڈلز کا بینچ مارک تقابل
+---------------------------------------------------------------------------------------------------------------+
| سب 100ms گھوسٹ ٹیکسٹ ماڈلز کے بینچ مارک نتائج |
+-----------------------+--------------------+-------------------+------------------+-------------+-------------+
| ماڈل | سنگل لائن FIM درستگی| ملٹی لائن بلاک | پہلے ٹوکن کا وقت | رفتار | میموری |
| | (Pass@1) | درستگی (Pass@1) | (TTFT p50) | (ٹوکن/سیکنڈ)| VRAM (FP16) |
+-----------------------+--------------------+-------------------+------------------+-------------+-------------+
| Qwen 2.5 Coder 1.5B | 84.6% | 64.2% | 42 ms | 188 tok/s | 3.2 GB |
| Qwen 2.5 Coder 7B | 89.2% | 76.8% | 84 ms | 112 tok/s | 15.2 GB |
| DeepSeek Coder 1.3B | 78.4% | 56.1% | 39 ms | 196 tok/s | 2.8 GB |
| StarCoder2 3B | 81.1% | 60.5% | 58 ms | 144 tok/s | 6.4 GB |
+-----------------------+--------------------+-------------------+------------------+-------------+-------------+
5. ایڈیٹر کنٹیکسٹ ونڈو کی حکمت عملی
- غیر متناسب ونڈو: 60-70% پریفکس کے لیے (1,500-3,000 ٹوکنز) اور 30-40% سفکس کے لیے (500-1,500 ٹوکنز)۔
- متعلقہ فائلوں کے ریفرنسز: Tree-sitter کے ذریعے قریبی ٹیبز سے اہم ٹائپس اور امپورٹس شامل کرنا۔
6. پائتھون اور FastAPI میں FIM سرور کا کوڈ
import os, time
from typing import Optional, List
from fastapi import FastAPI
from pydantic import BaseModel
import httpx
app = FastAPI(title="FIM Engine")
BACKEND_URL = os.getenv("INFERENCE_BACKEND_URL", "http://127.0.0.1:8000/v1/completions")
MODEL_NAME = os.getenv("MODEL_NAME", "Qwen/Qwen2.5-Coder-1.5B")
class FIMRequest(BaseModel):
prefix: str
suffix: str
max_tokens: int = 48
temperature: float = 0.1
@app.post("/v1/autocomplete")
async def autocomplete(req: FIMRequest):
t0 = time.perf_counter()
prompt = f"<|fim_prefix|>{req.prefix}<|fim_suffix|>{req.suffix}<|fim_middle|>"
stops = ["<|fim_prefix|>", "<|fim_suffix|>", "<|fim_middle|>", "<|endoftext|>", "\n\n"]
payload = {
"model": MODEL_NAME, "prompt": prompt, "max_tokens": req.max_tokens,
"temperature": req.temperature, "stop": stops, "stream": False
}
async with httpx.AsyncClient(timeout=1.5) as client:
resp = await client.post(BACKEND_URL, json=payload)
data = resp.json()
return {
"completion": data["choices"][0]["text"],
"latency_ms": round((time.perf_counter() - t0) * 1000, 2)
}
7. اسٹاپ ٹوکنز اور ڈپلیکیشن سے بچاؤ
- ماڈل کے تمام FIM اسپیشل ٹوکنز کو
stopلسٹ میں شامل کریں۔ - سنگل لائن کی تجاویز کے لیے دوہری نئی سطر (
\n\n) پر جنریشن روکیں۔ - سفکس میں پہلے سے موجود بریکٹس کی تکرار کو روکنے کے لیے کلائنٹ سائیڈ فلٹر لگائیں۔
8. اخراجات کا تخمینہ (100 ڈویلپرز کی ٹیم)
- 100 ڈویلپرز: روزانہ تقریباً 120,000 درخواستیں (ماہانہ 26.4 لاکھ)۔
- کمرشل Copilot: $1,900 ماہانہ ($19 فی کس)۔
- سرور لیس API: تقریباً $115.40 ماہانہ۔
- ڈیڈیکیٹڈ کلاؤڈ سرور (A10G): $730 ماہانہ (مکمل رازداری، <70ms لیٹنسی)۔
- مقامی لیپ ٹاپ (Mac M4 / RTX 4090): صفر کلاؤڈ خرچ۔
9. اختتامی سفارشات
- انفرادی لیپ ٹاپ کے لیے: Qwen 2.5 Coder 1.5B کو
llama.cppکے ذریعے چلائیں (42ms لیٹنسی اور صرف 3.2GB میموری)۔ - ٹیم کے مرکزی سرور کے لیے: Qwen 2.5 Coder 7B کو vLLM پر چلائیں (76.8% ملٹی لائن درستگی)۔
- سیاق و سباق محدود رکھیں: 100ms سے کم رفتار برقرار رکھنے کے لیے پریفکس کو 2,000 ٹوکنز کے اندر رکھیں۔