<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Python | The .NET Blog</title><link>https://thedotnetblog.com/hi/tags/python/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>hi</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Sat, 25 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/hi/tags/python/index.xml" rel="self" type="application/rss+xml"/><item><title>Agent Framework में CodeAct: अपने एजेंट की लेटेंसी को आधा कैसे करें</title><link>https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/codeact-agent-framework-hyperlight-50-percent-faster/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/codeact-agent-framework-hyperlight-50-percent-faster/</guid><description>CodeAct बहु-चरण टूल चेन को एक सैंडबॉक्स्ड कोड ब्लॉक में संकुचित करता है — लेटेंसी 52% और टोकन उपयोग 64% कम करता है।</description><content:encoded>&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल संस्करण के लिए &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/codeact-agent-framework-hyperlight-50-percent-faster/"&gt;यहाँ क्लिक करें&lt;/a&gt;।&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;हर एजेंट प्रोजेक्ट में एक ऐसा पल आता है जब आप ट्रेस देखते हैं और सोचते हैं: &amp;ldquo;इसमें इतना समय क्यों लग रहा है?&amp;rdquo; मॉडल ठीक है। टूल काम कर रहे हैं। लेकिन एक ऐसे परिणाम के लिए सात राउंड ट्रिप हो रहे हैं जो एक बार में की जा सकती थी।&lt;/p&gt;
&lt;p&gt;यही वह समस्या है जिसे CodeAct हल करता है — और &lt;a href="https://devblogs.microsoft.com/agent-framework/codeact-with-hyperlight/"&gt;Agent Framework टीम ने नए &lt;code&gt;agent-framework-hyperlight&lt;/code&gt; पैकेज के माध्यम से अल्फा सपोर्ट जारी किया है&lt;/a&gt;।&lt;/p&gt;
&lt;h2 id="codeact-कय-ह"&gt;CodeAct क्या है?&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://arxiv.org/abs/2402.01030"&gt;CodeAct पैटर्न&lt;/a&gt; सुंदर रूप से सरल है: मॉडल को एक-एक करके टूल कॉल करने के बजाय, उसे एक &lt;code&gt;execute_code&lt;/code&gt; टूल दें और पूरी योजना को एक छोटे Python प्रोग्राम के रूप में व्यक्त करने दें।&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;तरीका&lt;/th&gt;
&lt;th&gt;समय&lt;/th&gt;
&lt;th&gt;टोकन&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;पारंपरिक&lt;/td&gt;
&lt;td&gt;27.81s&lt;/td&gt;
&lt;td&gt;6,890&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CodeAct&lt;/td&gt;
&lt;td&gt;13.23s&lt;/td&gt;
&lt;td&gt;2,489&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;सुधार&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;52.4%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;63.9%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="सरकष-hyperlight-मइकर-vm"&gt;सुरक्षा: Hyperlight माइक्रो-VM&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;agent-framework-hyperlight&lt;/code&gt; पैकेज &lt;a href="https://github.com/hyperlight-dev/hyperlight"&gt;Hyperlight&lt;/a&gt; माइक्रो-VM का उपयोग करता है। प्रत्येक &lt;code&gt;execute_code&lt;/code&gt; कॉल को अपना नया माइक्रो-VM मिलता है। स्टार्टअप मिलीसेकंड में होता है। आइसोलेशन मूल रूप से मुफ्त है।&lt;/p&gt;
&lt;p&gt;आपके टूल होस्ट पर चलते रहते हैं। मॉडल द्वारा जेनरेट किया गया कोड सैंडबॉक्स में चलता है। यह सही विभाजन है।&lt;/p&gt;
&lt;h2 id="नयनतम-सटअप"&gt;न्यूनतम सेटअप&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;agent_framework&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tool&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;agent_framework_hyperlight&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;HyperlightCodeActProvider&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;codeact&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;HyperlightCodeActProvider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;get_weather&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;approval_mode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;never_require&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;CodeActAgent&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;You are a helpful assistant.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;context_providers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;codeact&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="कब-codeact-उपयग-कर"&gt;कब CodeAct उपयोग करें&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;CodeAct का उपयोग करें जब:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;कार्य में कई छोटी टूल कॉल हों (लुकअप, जॉइन, गणना)&lt;/li&gt;
&lt;li&gt;लेटेंसी और टोकन लागत महत्वपूर्ण हो&lt;/li&gt;
&lt;li&gt;मॉडल-जेनरेटेड कोड के लिए मजबूत आइसोलेशन चाहिए&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;पारंपरिक टूल-कॉलिंग रखें जब:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;एजेंट प्रति टर्न केवल एक-दो टूल कॉल करता हो&lt;/li&gt;
&lt;li&gt;प्रत्येक कॉल में अलग-अलग अनुमोदन की जरूरत हो&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="अभ-आजमए"&gt;अभी आज़माएं&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip install agent-framework-hyperlight --pre
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/agent-framework/codeact-with-hyperlight/"&gt;Agent Framework ब्लॉग की पूरी पोस्ट&lt;/a&gt; पढ़ें।&lt;/p&gt;</content:encoded></item><item><title>आपका एजेंट चीजें कहाँ याद रखता है? चैट हिस्ट्री स्टोरेज का व्यावहारिक गाइड</title><link>https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/chat-history-storage-patterns-agent-framework/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/chat-history-storage-patterns-agent-framework/</guid><description>सर्विस-मैनेज्ड या क्लाइंट-मैनेज्ड? लीनियर या ब्रांचिंग? यह आर्किटेक्चरल निर्णय तय करता है कि आपका AI एजेंट वास्तव में क्या कर सकता है — C# और Python कोड उदाहरणों के साथ।</description><content:encoded>&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित की गई है। मूल संस्करण के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/chat-history-storage-patterns-agent-framework/"&gt;यहाँ क्लिक करें&lt;/a&gt;।&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;जब आप एक AI एजेंट बनाते हैं, तो अधिकांश ऊर्जा मॉडल, टूल्स और प्रॉम्प्ट पर लगाते हैं। &lt;em&gt;बातचीत का इतिहास कहाँ रहता है&lt;/em&gt; यह सवाल एक इम्प्लीमेंटेशन डिटेल लगता है — लेकिन यह सबसे महत्वपूर्ण आर्किटेक्चरल निर्णयों में से एक है जो आप लेंगे।&lt;/p&gt;
&lt;p&gt;यह निर्धारित करता है कि उपयोगकर्ता बातचीत को ब्रांच कर सकते हैं, जवाब पूर्ववत कर सकते हैं, रीस्टार्ट के बाद सेशन फिर शुरू कर सकते हैं, और आपका डेटा कभी आपके इन्फ्रास्ट्रक्चर से बाहर जाता है या नहीं। &lt;a href="https://devblogs.microsoft.com/agent-framework/chat-history-storage-patterns-in-microsoft-agent-framework/"&gt;Agent Framework टीम ने एक गहन विश्लेषण प्रकाशित किया है&lt;/a&gt;।&lt;/p&gt;
&lt;h2 id="द-बनयद-पटरन"&gt;दो बुनियादी पैटर्न&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;सर्विस-मैनेज्ड&lt;/strong&gt;: AI सर्विस बातचीत की स्थिति संग्रहीत करती है। आपका ऐप एक संदर्भ रखता है और सर्विस स्वचालित रूप से प्रत्येक अनुरोध में प्रासंगिक इतिहास शामिल करती है।&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;क्लाइंट-मैनेज्ड&lt;/strong&gt;: आपका ऐप पूरा इतिहास रखता है और प्रत्येक अनुरोध के साथ प्रासंगिक संदेश भेजता है। सर्विस स्टेटलेस है। आप सब नियंत्रित करते हैं।&lt;/p&gt;
&lt;h2 id="agent-framework-कस-अमरत-करत-ह"&gt;Agent Framework कैसे अमूर्त करता है&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AgentSession&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CreateSessionAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;first&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;मेरा नाम Alice है।&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;मेरा नाम क्या है?&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="परदत-तवरत-सदरभ"&gt;प्रदाता त्वरित संदर्भ&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;प्रदाता&lt;/th&gt;
&lt;th&gt;स्टोरेज&lt;/th&gt;
&lt;th&gt;मॉडल&lt;/th&gt;
&lt;th&gt;संपीड़न&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI/Azure Chat Completions&lt;/td&gt;
&lt;td&gt;क्लाइंट&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;आप&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Foundry Agent Service&lt;/td&gt;
&lt;td&gt;सर्विस&lt;/td&gt;
&lt;td&gt;लीनियर&lt;/td&gt;
&lt;td&gt;सर्विस&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Responses API (डिफ़ॉल्ट)&lt;/td&gt;
&lt;td&gt;सर्विस&lt;/td&gt;
&lt;td&gt;ब्रांचिंग&lt;/td&gt;
&lt;td&gt;सर्विस&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anthropic Claude, Ollama&lt;/td&gt;
&lt;td&gt;क्लाइंट&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;आप&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="कस-चन"&gt;कैसे चुनें&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;ब्रांचिंग या &amp;ldquo;पूर्ववत&amp;rdquo; चाहिए?&lt;/strong&gt; → सर्विस-मैनेज्ड Responses API&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;डेटा संप्रभुता चाहिए?&lt;/strong&gt; → DB-बैक्ड प्रदाता के साथ क्लाइंट-मैनेज्ड&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;सिंपल चैटबॉट?&lt;/strong&gt; → लीनियर सर्विस-मैनेज्ड ठीक है&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;पूर्ण निर्णय ट्री के लिए &lt;a href="https://devblogs.microsoft.com/agent-framework/chat-history-storage-patterns-in-microsoft-agent-framework/"&gt;पूरी पोस्ट&lt;/a&gt; पढ़ें।&lt;/p&gt;</content:encoded></item><item><title>Python, TypeScript और .NET में azd Hooks: Shell Scripts से मुक्ति</title><link>https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/azd-hooks-python-javascript-typescript-dotnet/</link><pubDate>Thu, 23 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/azd-hooks-python-javascript-typescript-dotnet/</guid><description>Azure Developer CLI अब Python, JavaScript, TypeScript या .NET में hooks लिखने की सुविधा देता है। माइग्रेशन स्क्रिप्ट के लिए Bash की ओर switch करने की जरूरत खत्म।</description><content:encoded>&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित की गई है। मूल संस्करण के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/azd-hooks-python-javascript-typescript-dotnet/"&gt;यहाँ क्लिक करें&lt;/a&gt;।&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;अगर आपने कभी पूरी तरह .NET में बना प्रोजेक्ट रखा हो और फिर भी azd hooks के लिए Bash scripts लिखनी पड़ी हों, तो वो दर्द आप समझते हैं। जब प्रोजेक्ट का बाकी सब कुछ C# है, तो pre-provisioning step के लिए shell syntax में क्यों जाएं?&lt;/p&gt;
&lt;p&gt;वो frustration अब officially solve हो गई है। Azure Developer CLI ने &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-multi-language-hooks/"&gt;hooks के लिए multi-language support launch&lt;/a&gt; किया है, और यह उतना ही अच्छा है जितना सुनाई देता है।&lt;/p&gt;
&lt;h2 id="hooks-कय-ह"&gt;Hooks क्या हैं&lt;/h2&gt;
&lt;p&gt;Hooks वो scripts हैं जो &lt;code&gt;azd&lt;/code&gt; lifecycle के key points पर run होती हैं — provisioning से पहले, deployment के बाद, और अन्य। ये &lt;code&gt;azure.yaml&lt;/code&gt; में define होती हैं और CLI को modify किए बिना custom logic inject करने देती हैं।&lt;/p&gt;
&lt;p&gt;पहले सिर्फ Bash और PowerShell support थे। अब &lt;strong&gt;Python, JavaScript, TypeScript या .NET&lt;/strong&gt; use कर सकते हैं — बाकी सब &lt;code&gt;azd&lt;/code&gt; automatically handle करता है।&lt;/p&gt;
&lt;h2 id="detection-कस-कम-करत-ह"&gt;Detection कैसे काम करती है&lt;/h2&gt;
&lt;p&gt;बस hook को एक file पर point करें और &lt;code&gt;azd&lt;/code&gt; extension से language infer करता है:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;hooks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;preprovision&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./hooks/setup.py&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;postdeploy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./hooks/seed.ts&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;postprovision&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./hooks/migrate.cs&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;कोई extra config नहीं। अगर extension ambiguous हो तो &lt;code&gt;kind: python&lt;/code&gt; (या relevant language) explicitly specify कर सकते हैं।&lt;/p&gt;
&lt;h2 id="language-specific-details"&gt;Language-specific details&lt;/h2&gt;
&lt;h3 id="python"&gt;Python&lt;/h3&gt;
&lt;p&gt;Script के साथ (या किसी parent directory में) &lt;code&gt;requirements.txt&lt;/code&gt; या &lt;code&gt;pyproject.toml&lt;/code&gt; रखें। &lt;code&gt;azd&lt;/code&gt; automatically virtual environment बनाएगा, dependencies install करेगा और script run करेगा।&lt;/p&gt;
&lt;h3 id="javascript-और-typescript"&gt;JavaScript और TypeScript&lt;/h3&gt;
&lt;p&gt;Same pattern — script के पास &lt;code&gt;package.json&lt;/code&gt; रखें और &lt;code&gt;azd&lt;/code&gt; पहले &lt;code&gt;npm install&lt;/code&gt; run करेगा। TypeScript के लिए &lt;code&gt;npx tsx&lt;/code&gt; use होता है, बिना compile step और बिना &lt;code&gt;tsconfig.json&lt;/code&gt;।&lt;/p&gt;
&lt;h3 id="net"&gt;.NET&lt;/h3&gt;
&lt;p&gt;दो modes उपलब्ध:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Project mode&lt;/strong&gt;: Script के पास &lt;code&gt;.csproj&lt;/code&gt; हो तो &lt;code&gt;azd&lt;/code&gt; automatically &lt;code&gt;dotnet restore&lt;/code&gt; और &lt;code&gt;dotnet build&lt;/code&gt; run करता है।&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Single-file mode&lt;/strong&gt;: .NET 10+ पर standalone &lt;code&gt;.cs&lt;/code&gt; files सीधे &lt;code&gt;dotnet run script.cs&lt;/code&gt; से run होती हैं। Project file की जरूरत नहीं।&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="executor-specific-configuration"&gt;Executor-specific configuration&lt;/h2&gt;
&lt;p&gt;हर language optional &lt;code&gt;config&lt;/code&gt; block support करती है:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;hooks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;preprovision&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./hooks/setup.ts&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;packageManager&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pnpm&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;postprovision&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./hooks/migrate.cs&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;configuration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Release&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;framework&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;net10.0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="net-developers-क-लए-कय-मयन-रखत-ह"&gt;.NET developers के लिए क्यों मायने रखता है&lt;/h2&gt;
&lt;p&gt;Hooks azd-based project में वो आखिरी जगह थी जो language switch करने पर मजबूर करती थी। अब पूरा deployment pipeline — app code से लेकर lifecycle hooks तक — एक ही language में रह सकता है। Existing .NET utilities hooks में reuse कर सकते हैं, shared libraries reference कर सकते हैं, और shell script maintenance से छुटकारा मिलता है।&lt;/p&gt;
&lt;h2 id="नषकरष"&gt;निष्कर्ष&lt;/h2&gt;
&lt;p&gt;ये उन changes में से एक है जो छोटे लगते हैं लेकिन azd के daily workflow से बहुत friction हटाते हैं। Hooks के लिए multi-language support अभी available है — full documentation के लिए &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-multi-language-hooks/"&gt;official post&lt;/a&gt; देखें।&lt;/p&gt;</content:encoded></item></channel></rss>