Relace Apply 3: مدل کوچیکی که diffها رو با ۱۰ هزار توکن در ثانیه اعمال میکنه
خلاصهٔ کاملتر
تیم Relace یه سال بعد از انتشار اولین مدل Fast Apply تجربهاش تو ساخت این مدلها رو منتشر کرده. مشکل اینجاست: اگه بخوای یه فایل هزارخطی (حدود ۱۰ هزار توکن) رو با Claude 4.5 Sonnet از اول بازنویسی کنی، بیشتر از ۱۰۰ ثانیه طول میکشه و حداقل ۰.۱۸ دلار خرج داره. راهحل اینه که مدل بزرگ فقط یه diff «تنبل» بنویسه (یعنی فقط بخشهای تغییرکرده، با بقیه که با کامنت حذف شدن) و یه مدل کوچیک و سریع اونو داخل کد اصلی ادغام کنه. Cursor این ایده رو اول آورد ولی مدلش رو بیرون از IDE در اختیار کسی نذاشت.
چرا خود ادغام رو با الگوریتم معمولی مثل string replace یا UDiff انجام ندیم؟ به گفتهٔ نویسندهها، مدلهای بزرگ diffهای عجیبوغریب زیادی تولید میکنن. مثلاً diffی که هم اسم تابع handler رو به messageHandler عوض میکنه و هم یه پارامتر به کوئری اضافه میکنه؛ یه الگوریتم ساده احتمالاً یه تابع تکراری میسازه، ولی یه LLM نیت diff رو میفهمه.
برای دیتاست، Relace بهجای ساختن تغییرات مصنوعی، با شرکتهای prompt-to-app همکاری کرد و context واقعی کارهای کدنویسی رو دوباره اجرا کرد تا initial_code و diff دقیقاً شبیه دادهٔ production باشن. خروجی درست، یعنی merged_code، با distillation از یه مدل معلم بزرگ ساخته شد و بعد فیلتر شد. تیم ۵۰۰ نمونه رو دستی بررسی کرد (بیشتر از ۴۰ ساعت کار) و ادغامها رو تو شش دسته گذاشت، از جمله smoothing یعنی وقتی مدل یه اشتباه کوچیک diff، مثل import جاافتاده، رو خودش درست میکنه.
بعد Claude 4 Sonnet بهعنوان LLM-as-a-judge (یعنی یه LLM که درست یا غلط بودن جواب رو داوری میکنه) روی همین ۵۰۰ نمونه تنظیم شد تا نرخ false positive از حدود ۱۶ به حدود ۱ درصد برسه. از ۲۰۰ هزار نمونهٔ اولیه، بعد از داوری و فیلترهای ایستا مثل بررسی syntax و حذف تکراریها، حدود ۱۴۵ هزار نمونهٔ تمیز موند. تیم میگه کیفیت و تنوع داده خیلی مهمتر از حجمش بوده و بعد از ۱۰۰ هزار نمونه بهبود چندانی ندیدن.
آموزش با SFT روی مدلهای کدنویسی متنباز ۳ تا ۸ میلیارد پارامتری و با LoRA (یعنی بهجای آموزش همهٔ وزنها، چند ماتریس کوچیک adapter روی مدل ثابت اضافه میشه) انجام شد. همهٔ داده روی یه GPU از نوع H200 و با context تا ۶۴ هزار توکن آموزش دید. بعد وزنها از BF16 به FP8 تبدیل شدن تا از هستههای FP8 کارتهای جدید Nvidia استفاده بشه، و تست روی همون ۵۰۰ نمونه نشون داد خروجیها عوض نشدن.
برای رسیدن به سرعت ۱۰ هزار توکن در ثانیه از speculative decoding استفاده شد، یعنی چند توکن بعدی حدس زده میشه و مدل همه رو یکجا تأیید میکنه. چون بخش بزرگی از merged_code همون کد اولیه و diffه، حدسها خیلی دقیقن. ولی هر توکن hallucinateشده زنجیره رو میشکنه، پس دادهٔ تمیز مستقیم روی سرعت هم اثر داره. Relace Apply 3 از context ۲۵۶ هزار توکنی پشتیبانی میکنه و فرمتهای مختلف diff رو هم میفهمه. تیم قبول داره که با بهتر شدن مدلهای بزرگ تو نوشتن diff، شاید این مدلها کمکم کنار برن.
نکات کلیدی:
- Relace Apply 3 بیشتر از ۱۰ هزار توکن در ثانیه خروجی میده و context ۲۵۶ هزار توکنی داره.
- دیتاست نهایی حدود ۱۴۵ هزار نمونه بوده که از ۲۰۰ هزار نمونهٔ اولیه فیلتر شده.
- داور LLM با تنظیم prompt نرخ false positive رو از حدود ۱۶ به حدود ۱ درصد رسوند.
- آموزش با LoRA روی مدلهای ۳ تا ۸ میلیارد پارامتری و یه GPU H200 انجام شد و وزنها به FP8 تبدیل شدن.
- بهترین مدلهای بزرگ حالا حدود ۹۶ درصد موفقیت در ویرایش دارن ولی مدلهای بدون این تنظیم هنوز حدود ۱۰ درصد خطا دارن.




