9 पॉइंट द्वारा GN⁺ 2025-06-10 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • TensorZero को एक open source proxy के रूप में इस्तेमाल करके, Cursor और LLM provider (OpenAI आदि) के बीच के ट्रैफ़िक को intercept और analyze किया गया, और prompt, model, तथा inference result को real time में observe करके optimization experiments किए गए
  • Cursor, LLM call के समय Base URL और model name को override करने देता है, इसलिए अपना proxy (TensorZero) आसानी से जोड़ा जा सकता है
  • अंदरूनी तौर पर Cursor, LLM को call करने से पहले अपने server से होकर गुजरता है, इसलिए पूरी proxy setup के लिए Ngrok + Nginx reverse proxy और CORS header setting की ज़रूरत पड़ती है
  • Proxy के ज़रिए Cursor वास्तव में LLM को जो system prompt, user prompt, और inline code edit request भेजता है, उन सबको observe किया जा सकता है, और अलग-अलग LLM के साथ real time switch/A-B testing भी संभव है
  • Cursor के system prompt के analysis से पता चला कि सिर्फ लगभग 642 token के prompt से ही LLM ज़्यादातर software engineering context को समझ और process कर लेता है। Code edit का काम अलग "apply model" (कम intelligent सहायक model) संभालता है
  • TensorZero जैसे proxy architecture के साथ, प्रति-उपयोगकर्ता customized LLM experiments और feedback-based optimization संभव है, और यह setup code assistant tools की quality evaluation (A/B testing), prompt optimization, और real-world usage monitoring के लिए आदर्श है

परिचय

  • TensorZero open source framework को Cursor और विभिन्न LLM (large language model) के बीच proxy gateway के रूप में जोड़ने का अनुभव, और उससे मिले observation, experiment, तथा optimization points पर चर्चा की गई है
  • TensorZero एक open source tool है, जो feedback signals (production metrics, user behavior आदि) का उपयोग करके LLM applications की quality बेहतर करने में मदद करता है
  • Cursor उपयोगकर्ता के रूप में, सबसे अधिक इस्तेमाल होने वाले LLM-आधारित IDE पर इस तकनीक को लागू करके यह जांचा गया कि वास्तव में कौन-से API requests जा रहे हैं, और optimization को सीधे कैसे आज़माया जा सकता है

समग्र अवलोकन और उद्देश्य

  • Cursor एक coding assistant है जो पूरे user base के लिए optimized है, लेकिन व्यक्तिगत customization experiments और data observation लगभग असंभव हैं
  • TensorZero को proxy के रूप में रखने पर, Cursor requests, LLM responses, prompt, model, और पूरे inference process को पारदर्शी रूप से observe, experiment, और optimize किया जा सकता है
  • ज़्यादातर optimization, evaluation, और experiment methods के लिए वास्तविक inference data अनिवार्य होता है, इसलिए इसे इकट्ठा करने के व्यावहारिक तरीके और automation approach को विस्तार से दिखाया गया है

इंटीग्रेशन प्रक्रिया: LLM gateway बनाना

  • Cursor, OpenAI base URL और model name को user-defined रूप में बदलने की सुविधा देता है
  • TensorZero, OpenAI-compatible inference endpoint देता है, इसलिए Cursor को OpenAI की जगह TensorZero से जोड़ा जा सकता है
  • TensorZero में cursorzero function register करके, अलग-अलग model/prompt experiments और provider से स्वतंत्र inference तथा feedback data की automated storage संभव हो जाती है

पहली बाधा: Cursor का अपना server

  • Cursor ने local TensorZero से सीधे connect करने की कोशिश की, लेकिन यह विफल रहा
  • Cursor हमेशा पहले अपने server को request भेजता है, और उसके बाद अंदरूनी processing के साथ LLM call आगे बढ़ाता है
    • इसका मतलब है कि credentials Cursor server तक पहुंचते हैं, और वह server सभी requests तथा codebase से संबंधित data collect कर सकता है
  • विकल्प के रूप में, OpenRouter से जोड़कर Cursor के कुछ interactions में external model उपयोग की संभावना जांची गई
  • Cursor का Tab autocomplete उसके अपने private model पर चलता है, और इसे दूसरे LLM के साथ मिलाकर इस्तेमाल किया जा सकता है
  • अंत में reverse proxy और Ngrok का उपयोग करके, एक public endpoint के ज़रिए अंदरूनी TensorZero तक requests proxy करने वाली संरचना से समाधान निकाला गया
  • सामने की परत में Nginx रखकर authentication और security मजबूत की गई, और custom TensorZero function के ज़रिए LLM routing भी पूरी की गई
  • अंतिम संरचना:
    • Cursor → Ngrok → Nginx(authentication) → TensorZero(local) → LLM Provider

दूसरी बाधा: CORS

  • Authentication के दौरान CORS preflight (OPTIONS) request Nginx तक पहुंचती थी, जिससे शुरुआती authentication नहीं हो पा रहा था
  • Nginx को इस तरह configure किया गया कि वह OpenAI API जैसे CORS headers लौटाए, ताकि Electron-आधारित Cursor IDE की requirements पूरी हो सकें
  • Authentication और CORS समस्याएं हल होने के बाद, सभी वास्तविक requests Cursor server के माध्यम से पूरी होने लगीं
  • (Nginx configuration example code शामिल है)

अंतिम परिणाम: अब Cursor के अंदर झांकना संभव

  • सभी LLM requests/responses, system prompt, user prompt, और attached code/file contents को real time में observe किया जा सकता है
  • System prompt के example में, code editing के लिए अलग "apply model" चलाने के निर्देश भी स्पष्ट रूप से दिए गए हैं (दो-स्तरीय model architecture)
  • Cursor prompt की मुख्य संरचना:
    • user session information, file और cursor position जैसी context जानकारी देना
    • comment block आदि से sections को चिह्नित करना
    • code modification request होने पर ‘सिर्फ बदले हुए हिस्से को न्यूनतम रूप में’ code block में बनाने का निर्देश
  • Cursor की prompt engineering
    • सिर्फ 642 token के एक बड़े system prompt से ही ज़्यादातर software engineering tasks automate हो जाते हैं
  • Code change tasks के लिए विशेष रूप से एक कम intelligent apply model (सहायक model) अलग मौजूद है, और main LLM को साफ़ तौर पर target और rules बताए जाते हैं
    • यह पुष्टि हुई कि अलग-अलग LLM layers (intelligence, function separation) वास्तव में prompt के भीतर लागू हैं

निष्कर्ष और संकेत

  • Cursor, नवीनतम LLM के built-in knowledge और concise prompt के सहारे software engineering context को संभाल सकता है
  • TensorZero जैसे proxy के साथ user-specific feedback और real-world usage data पर आधारित optimization (A/B testing, prompt/model tuning) संरचना आसानी से बनाई जा सकती है
  • Code editor assistant AI या LLM अपनाने वाली कंपनियां इस तरीके से prompt design, performance improvement, और user-specific optimization पर तेज़ी से experiment कर सकती हैं
  • अगली पोस्ट में वास्तविक usage data collection methods, Tree-sitter, और git hook के उपयोग जैसे आगे के experiments साझा किए जाएंगे

1 टिप्पणियां

 
GN⁺ 2025-06-10
Hacker News राय
  • Cursor उन सेवाओं में एकमात्र प्रोडक्ट था जिसे मैं 20 साल से ज़्यादा समय से इस्तेमाल कर रहा हूँ, लेकिन बिल्कुल भी customer support न मिलने की वजह से मैंने उसकी subscription रद्द कर दी
    कई हफ्तों तक billing से जुड़े सवालों पर मैंने कई बार ईमेल भेजे, लेकिन मुझे एक भी जवाब नहीं मिला
    यह कोई साधारण VS Code से जुड़ा सवाल नहीं था, बल्कि ऐसा issue था जिसमें Cursor टीम की सीधी मदद ज़रूरी थी
    लेकिन promo emails तो नियमित रूप से आते रहे
    उम्मीद है Cursor का यह ‘value’ जल्दी दूसरी services तक भी पहुँचे
    बस अगली टीम ईमेल का जवाब दे दे

    • मेरा अनुभव भी लगभग ऐसा ही रहा, और मैंने इस बारे में issue भी दर्ज किया था
  • इस prompt में बहुत कुछ गायब है
    सबसे स्पष्ट कमी tool call descriptors की है
    चाहो तो इसे 1 साल पहले के jailbreaking prompt से सीधे compare कर सकते हो
    फिर भी cursor rules जैसी दूसरी settings के पीछे का idea अच्छा है
    संदर्भ के लिए, संबंधित prompt material यहाँ देखा जा सकता है

    • Cursor यूज़र की action के हिसाब से अलग-अलग prompts इस्तेमाल करता है
      अभी हमने सिर्फ samples दिए हैं, लेकिन मूल लक्ष्य अलग-अलग models का A/B testing करना और prompts व models को optimize करना है
      reproducibility के लिए code भी दिया गया है, और वहाँ दूसरे prompts भी देखे जा सकते हैं
      तुम्हारे द्वारा साझा किया गया Gist material भी काफ़ी उपयोगी है

    • मुझे लगता है शायद कोई optimization logic हो, जो यूज़र की query के आधार पर सिर्फ वही tool info prompt में डालता हो जो वास्तव में ज़रूरी है
      शायद token बचाने के लिए गैर-ज़रूरी tool descriptors को आक्रामक रूप से हटा दिया जाता हो

    • संबंधित संदर्भ यहाँ है

  • तो... क्या अब wireshark इस्तेमाल नहीं किया जा सकता?

    • लेख के अंत में साफ़ लिखा है कि यह सिर्फ शुरुआती पोस्ट है, ताकि यह तय करने से पहले एक नज़र डाल सकें कि इसे कैसे इस्तेमाल किया जाए
      वैसे, आजकल केवल packets देखने के लिए mitmproxy काफ़ी शानदार हो गया है mitmproxy docs

    • wireshark का इस्तेमाल desktop app से Cursor server तक जाने वाली requests देखने के लिए किया जा सकता है, यानी वे requests जो असल में LLM की ओर जाती हैं
      लेकिन अगर आप देखना चाहते हैं कि Cursor server से LLM तक वास्तविक request कैसे जाती है, तो उसके लिए अलग setup चाहिए
      ऐसे setup के साथ हम requests बदल-बदलकर A/B testing भी कर सकते हैं

  • Cursor और तरह-तरह के IDE modality solutions दिलचस्प हैं, लेकिन यह अफ़सोसजनक है कि ये लोगों में context को ढीले-ढाले तरीके से संभालने की आदत डाल देते हैं
    Cursor prompt से लिया गया एक अंश देखें,
    "जब भी यूज़र message भेजता है, हम current state, session के भीतर edit history, linter errors जैसी अतिरिक्त जानकारी अपने आप जोड़ सकते हैं, और यह जानकारी coding task से संबंधित भी हो सकती है और नहीं भी. इसकी उपयुक्तता तुम तय करो"
    इस तरह का ‘context bloat’ LLM की performance को तब बहुत सीमित कर देता है जब उसे सच में कठिन समस्याएँ हल करनी होती हैं
    उदाहरण के तौर पर दिया गया .env issue एक सरल प्रकार की समस्या है, इसलिए Cursor उसे अच्छी तरह संभाल लेता है, लेकिन इतनी जटिलता पर software engineer को लंबे समय तक hire करके नहीं रखा जा सकता
    व्यक्तिगत रूप से, AI के साथ काम करते समय मैं पहले chat interface में conversation context को साफ़-सुथरे ढंग से manage करने के तरीक़े पर ध्यान देने की सलाह दूँगा
    जटिल समस्याओं में meetings, Slack बातचीत, internal docs, external content और code सब context में उलझे होते हैं
    मैंने FileKitty(लिंक) और हाल में slackprep(लिंक) जैसे tools बनाए हैं, ताकि समस्या-समाधान से वास्तव में जुड़ी जानकारी ही चुनी जाए और उसे अधिक इरादतन ढंग से इस्तेमाल किया जा सके

    • मैं भी इस बात से सहमत हूँ, और अपने agent app को विकसित करते समय मुझे context को कहीं ज़्यादा सावधानी से curate करना पड़ा
      instruction इस तरह लिखनी पड़ी कि "अपने आप attach किया जा सकता है" नहीं, बल्कि केवल वही शामिल हो जो वास्तव में attach किया गया हो
      "यह संबंधित भी हो सकता है और नहीं भी, तुम ख़ुद तय करो" कहने के बजाय, relevance होने और न होने की दोनों स्थितियों में क्या करना है, इस पर स्पष्ट निर्देश होने चाहिए
      context छोटा हो तो यह बड़ी समस्या नहीं बनती, लेकिन लंबे और जटिल issues में इस तरह की सूक्ष्म instructions बहुत बड़ा फ़र्क पैदा करती हैं
      शायद Cursor cached token pricing का लाभ लेने के लिए instructions को जानबूझकर यथासंभव general रखता है
      अभी बहुत कुछ experimental stage में है, और आगे prompts व models में काफ़ी सुधार होने की उम्मीद है
  • Cursor के prompt पर एक और analysis यहाँ देखा जा सकता है

  • मैं हमेशा सोचता था कि लंबी बातचीत में relevant context चुनने की प्रक्रिया कैसे काम करती है
    क्या किसी ने वास्तव में उस logic का reverse engineering किया है, यह समझने के लिए कि edit history को कैसे truncate किया जाता है और file की latest state को कैसे represent किया जाता है?

    • मैंने उस workflow को बहुत गहराई से नहीं देखा, लेकिन हमने जो काम किया है उसे GitHub पर सीधे reproduce किया जा सकता है, इसलिए वहाँ से कुछ संकेत मिल सकते हैं
      आगे भी मैं इस हिस्से की जाँच जारी रखूँगा, और TensorZero का उपयोग करके model और prompt optimization के experiments भी जारी रखूँगा
  • मैं mitmproxy का इस्तेमाल करके इसी तरीके से analysis कर रहा हूँ संबंधित चर्चा

  • अब जब prompt की जानकारी मिल गई है, तो क्या Cursor server को दोबारा implement करके पूरी तरह local (या किसी तरह का cracked) version बनाना संभव होगा?

    • या फिर शुरू से ही Cline, Roo Code जैसे open source, agent coding-केंद्रित projects मौजूद हैं, तो शायद वही इस्तेमाल करना बेहतर होगा

    • यह थोड़ा हैरान करने वाला है कि किसी ने सिर्फ prompt सामने आने का इंतज़ार करके ही यह कोशिश की

    • Cursor का apply model शायद server पर चलता है
      यह सोचने वाली बात है कि local apply model को सीधे implement करना कितना मुश्किल होगा
      हो सकता है MacBook पर चलाने से यह काफ़ी तेज़ भी हो

    • हाँ, यह निश्चित रूप से संभव है