इस प्रोजेक्ट के बारे में

SNAFU (Symbol Name Ambiguity Fixer-Upper) एक कमांड-लाइन डेवलपर टूल है जो बड़े भाषा मॉडल (LLMs) का उपयोग करके डेवलपर्स को उनके स्रोत कोड में प्रतीकों के लिए स्पष्ट और कम अस्पष्ट नाम चुनने में मदद करता है। यह नाम अस्पष्टता संख्या (NAN) नामक एक मीट्रिक पेश करता है, जो यह मात्रा निर्धारित करता है कि एक प्रतीक नाम को कितनी आसानी से गलत समझा जा सकता है। यह टूल एक बहु-चरण एजेंटिक पाइपलाइन के माध्यम से संचालित होता है। सबसे पहले, यह स्रोत फ़ाइल से प्रतीकों को निकालता है और उन्हें किसी भी आसपास की संदर्भ (जैसे फ़ंक्शन बॉडी या डॉकस्ट्रिंग) के बिना LLM को भेजता है, ताकि कोड को ताज़ा आँखों से पढ़ने वाले डेवलपर के संज्ञानात्मक भार का अनुकरण किया जा सके। LLM नाम के लिए संभावित, परस्पर अनन्य व्याख्याओं की एक सूची प्रदान करता है, साथ ही उनकी संभावनाएँ भी। SNAFU इन संभावनाओं का उपयोग शैनन एन्ट्रॉपी की गणना करने और NAN प्राप्त करने के लिए करता है, जहाँ कम स्कोर का अर्थ है स्पष्ट नाम। इसके बाद एक मानव-इन-द-लूप चरण आता है, जहाँ उपयोगकर्ता प्रतीक के वास्तविक इरादित अर्थ की पुष्टि करता है। LLM फिर एक नया नाम सुझाता है जो केवल उस पुष्टि किए गए अर्थ को व्यक्त करता है। इस प्रस्तावित नाम का पुनर्मूल्यांकन किया जाता है ताकि एक नया NAN प्राप्त किया जा सके। यदि नया नाम अस्पष्टता को कम नहीं करता है (एक सकारात्मक डेल्टा), तो इसे त्याग दिया जाता है। जीवित सुझावों को अंतिम पुष्टि के लिए पूर्ण संदर्भ के साथ एक LLM द्वारा sanity check से गुजारा जाता है ताकि यह सुनिश्चित किया जा सके कि नया नाम समझ में आता है और पुष्टि किए गए अर्थ के साथ मेल खाता है। अंत में, प्रस्तावित नाम परिवर्तनों की एक रिपोर्ट उपयोगकर्ता को प्रस्तुत की जाती है। SNAFU के लिए Python 3.14 या बाद का संस्करण और `uv` पैकेज प्रबंधक की आवश्यकता होती है। यह `any-llm` लाइब्रेरी के माध्यम से कई LLM प्रदाताओं को सपोर्ट करता है, जिससे उपयोगकर्ता `--model` ध्वज का उपयोग करके अलग-अलग मॉडल निर्दिष्ट कर सकते हैं। डिफ़ॉल्ट रूप से, यह मूल रूप से Python को समझता है और अन्य भाषाओं, जिनमें Ruby, C#, Java, JavaScript, TypeScript, PHP, Rust, और Go शामिल हैं, के लिए प्रतीक निष्कर्षण के लिए Tree-sitter का उपयोग करता है।