[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M699MQ9JN01FF4GE712R79YQ":3,"skill-same:01M699MQ9JN01FF4GE712R79YQ":62},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":24,"commitSha":25,"skillDirectory":26,"forksCount":27,"repositoryHtmlUrl":28,"repositoryHomepageUrl":29,"ownerHtmlUrl":30,"ownerBlogUrl":31,"ownerDescription":32,"updatedAt":33,"install":34,"resources":47},"01M699MQ9JN01FF4GE712R79YQ","azure-openai-to-responses",null,"microsoft\u002Fai-agents-for-beginners","microsoft","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6154722?v=4","01M698VYDXZ6JW5WH3CRV650R8","Microsoft","01M6998ZK2275KMJE6Y5SEA2X2",79504,"MIT","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fai-agents-for-beginners\u002Fblob\u002Fmain\u002Ftranslations\u002Fmr\u002F.agents\u002Fskills\u002Fazure-openai-to-responses\u002FSKILL.md",[],[18],"azure openai to responses","2026-11-10 10:12:30",false,"---\nname: azure-openai-to-responses\nlicense: MIT\n---\n# Azure OpenAI Chat Completions कडून Responses API कडे Python अ‍ॅप्सचे स्थलांतर करा\n\n> **अधिकृत मार्गदर्शन — नेमके पालन करा**\n>\n> हा कौशल्य Azure OpenAI Chat Completions वापरणारे Python कोडबेस Responses API या एकत्रित अनुप्रयोगाकडे स्थलांतरित करतो.\n> कृपया या सूचनांचे अचूक पालन करा.\n> पॅरामीटर मॅपिंगमध्ये अनिश्चितता करू नका किंवा API चे स्वरूप बनवू नका.\n\n---\n\n## ट्रिगर्स\n\nवापरकर्ता जेव्हा इच्छितो तेव्हा हा कौशल्य सक्रिय करा:\n- Azure OpenAI Chat Completions कडून Responses API कडे Python अ‍ॅप स्थलांतर करा\n- Azure OpenAI विरुद्ध नवीनतम API स्वरूपासाठी Python OpenAI SDK वापर सुधारित करा\n- GPT-5 किंवा नवीन मॉडेलसाठी Python कोड तयार करा ज्यांना Azure वर Responses API ची आवश्यकता आहे\n- `AzureOpenAI`\u002F`AsyncAzureOpenAI` कडून मानक `OpenAI`\u002F`AsyncOpenAI` क्लायंटकडे v1 एंडपॉइंटसह बदला\n- `AzureOpenAI` कन्स्ट्रक्टर्स किंवा `api_version` संबंधित डिप्रिकेटेड चेतावण्या दुरुस्त करा\n\n---\n\n## ⚠️ मॉडेल सुसंगतता — प्रथम तपासा\n\n> **स्थलांतर करण्यापूर्वी, खात्री करा की तुमचा Azure OpenAI डिप्लॉयमेंट Responses API ला सपोर्ट करतो.**\n\n### 1. तुमच्या डिप्लॉयमेंटची स्मोक-टेस्ट करा (सर्वात जलद)\n\n```python\nimport os\nfrom openai import OpenAI\n\nclient = OpenAI(\n    api_key=os.environ[\"AZURE_OPENAI_API_KEY\"],\n    base_url=f\"{os.environ['AZURE_OPENAI_ENDPOINT'].rstrip('\u002F')}\u002Fopenai\u002Fv1\u002F\",\n)\n\ntry:\n    resp = client.responses.create(\n        model=os.environ[\"AZURE_OPENAI_DEPLOYMENT\"],\n        input=\"ping\",\n        max_output_tokens=50,\n        store=False,\n    )\n    print(f\"✅ Deployment supports Responses API: {resp.output_text}\")\nexcept Exception as e:\n    print(f\"❌ Deployment does NOT support Responses API: {e}\")\n```\n\n> **सूचना**: Azure OpenAI वर `max_output_tokens` किमान 16 आहे. 16 पेक्षा कमी मूल्ये 400 त्रुटी परत करतात. स्मोक टेस्टसाठी 50+ वापरा.\n\nजर 404 परत आला तर डिप्लॉयमेंटच्या मॉडेलने अजून Responses सपोर्ट केलेले नाही — खालील संदर्भ तपासा किंवा समर्थित मॉडेलसह पुन्हा डिप्लॉय करा.\n\n### 2. तुमच्या प्रदेशातील उपलब्ध मॉडेल तपासा (शिफारस केली जाते)\n\nResponses API सपोर्टसह तुमच्या विशिष्ट प्रदेशात काय उपलब्ध आहे ते पाहण्यासाठी अंगभूत मॉडेल सुसंगतता साधन चालवा:\n\n```bash\npython migrate.py models --subscription YOUR_SUB_ID --location YOUR_REGION\n```\n\nहे Azure ARM ला थेट क्वेरी करते आणि सुसंगतता मॅट्रिक्स दाखवते — कोणते मॉडेल्स Responses, संरचित आउटपुट, टूल्स इ. सपोर्ट करतात. `--filter gpt-5.1,gpt-5.2` वापरून निकाल कमी करा किंवा स्क्रिप्टिंगसाठी `--json` वापरा.\n\n### 3. पूर्ण मॉडेल सपोर्ट संदर्भ\n\n- **थेट क्वेरी**: `python migrate.py models` (वरीलप्रमाणे — प्रदेश-विशिष्ट, सदैव अद्ययावत)\n- **उपलब्धता ब्राउझ करा**: [मॉडेल सारांश तक्ती आणि प्रदेश उपलब्धता](https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Ffoundry\u002Ffoundry-models\u002Fconcepts\u002Fmodels-sold-directly-by-azure?tabs=global-standard-aoai%2Cglobal-standard&pivots=azure-openai#model-summary-table-and-region-availability)\n- **क्विकस्टार्ट & मार्गदर्शन**: **https:\u002F\u002Faka.ms\u002Fopenai\u002Fstart**\n\n### ⚠️ जुने मॉडेल मर्यादा\n\n> **इशारा**: जुन्या मॉडेल्स (`gpt-4.1` पूर्वीचे) कदाचित Responses API चे सर्व फिचर पूर्णपणे समर्थित करू शकत नाहीत.\n>\n> जुन्या मॉडेल्ससह ओळखल्या गेलेल्या मर्यादा:\n> - **`reasoning` पॅरामीटर**: अनेक नॉन-रीझनिंग मॉडेल्सवर समर्थित नाही. मूळ कोडमध्ये असेल तरच `reasoning` स्थलांतर करा.\n> - **`seed` पॅरामीटर**: Responses API मध्ये अजिबात समर्थित नाही — सर्व विनंत्यांमधून काढा.\n> - **`text.format` द्वारे संरचित आउटपुट**: जुन्या मॉडेल्स कदाचित `strict: true` JSON स्कीमा विश्वसनीयपणे लागू करू शकत नाहीत.\n> - **टूल ऑर्केस्ट्रेशन**: GPT-5+ अंतर्गत रीझनिंगचा भाग म्हणून टूल कॉल्सचे नियोजन करते. जुन्या Responses मॉडेल्स चालतात पण सखोल समाकलन नसते.\n> - **तापमान मर्यादा**: `gpt-5` कडे स्थलांतर करताना तापमान टाळावे किंवा `1` वर सेट करावे. जुन्या मॉडेल्सवर अशी मर्यादा नाही.\n\n### O-सीरीज रीझनिंग मॉडेल्स (o1, o3-mini, o3, o4-mini)\n\nO-सीरीज मॉडेल्सना विशेष पॅरामीटर मर्यादा असतात. जेव्हा o-सीरीज मॉडेल्ससाठी अ‍ॅप्स स्थलांतरित करत असाल:\n\n- **`temperature`**: `1` असणे आवश्यक (किंवा वगळा). O-सीरीज मॉडेल्स इतर मूल्य स्वीकारत नाहीत.\n- **`max_completion_tokens` → `max_output_tokens`**: Azure-विशिष्ट `max_completion_tokens` वापरणारे अ‍ॅप्स `max_output_tokens` कडे स्विच करा. reasoning टोकन्समुळे मर्यादा जास्त ठेवा (4096+).\n- **`reasoning_effort`**: अ‍ॅपमध्ये `reasoning_effort` (low\u002Fmedium\u002Fhigh) वापरले असेल तर ठेवा — Responses API o-सीरीज मॉडेल्ससाठी हे पॅरामीटर सपोर्ट करते.\n- **स्ट्रीमिंग वर्तन**: O-सीरीज मॉडेल्स रीझनिंग पूर्ण होईपर्यंत आउटपुट बफर करू शकतात आणि नंतर टेक्स्ट डेल्टा इव्हेंट्स पाठवतात. स्ट्रीमिंग चालू राहते, पण GPT मॉडेल्सच्या तुलनेत पहिला `response.output_text.delta` देरीने येऊ शकतो.\n- **`top_p`**: O-सीरीजवर समर्थित नाही — असल्यास काढा.\n- **टूल वापर**: O-सीरीज मॉडेल्स Responses API द्वारे GPT मॉडेल्ससारखे टूल्स सपोर्ट करतात, पण टूल कॉल ऑर्केस्ट्रेशन गुणवत्ता मॉडेलनुसार वेगळी आहे.\n\n**क्रिया — सक्रिय मॉडेल सल्ला**: स्कॅन टप्प्यात अ‍ॅप कोणत्या मॉडेलसाठी टार्गेट करते ते तपासा (डिप्लॉयमेंट नावे, एन्व्ह वेरिएबल्स, कॉन्फिग). मॉडेल जर `gpt-4.1` पूर्वीचे असेल तर वापरकर्त्याला पुढील सूचना द्या:\n- स्थलांतर त्याच्या सध्याच्या मॉडेलवर बेसिक टेक्स्ट, चॅट, स्ट्रीमिंग, आणि टूल्ससाठी काम करेल.\n- नवीन मॉडेल्स (`gpt-5.1`, `gpt-5.2`) चांगले टूल ऑर्केस्ट्रेशन, संरचित आउटपुट अंमलबजावणी, रीझनिंग, आणि क्रॉस-रिजन उपलब्धता देतात.\n- त्यांना जेव्हा तयार वाटेल तेव्हा डिप्लॉयमेंट अपग्रेड करण्याचा विचार करावा — हे स्थलांतराला अडथळा ठरत नाही.\n\nमॉडेल आवृत्तीवर आधारित स्थलांतर थांबवू किंवा नकार देऊ नका. हा सल्ला माहितीपर आहे.\n\n### GitHub मॉडेल्स Responses API ला सपोर्ट करत नाहीत\n\n> **GitHub मॉडेल्स (`models.github.ai`, `models.inference.ai.azure.com`) Responses API ला सपोर्ट करत नाहीत.**\n\nजर कोडबेसमध्ये GitHub मॉडेल्सचा कोड पथ असेल (`base_url` जे `models.github.ai` किंवा `models.inference.ai.azure.com` कडे निर्देशित करतो), तर **स्थलांतर दरम्यान पूर्णपणे काढून टाका**. Responses API साठी Azure OpenAI, OpenAI, किंवा जुळणारा लोकल एंडपॉइंट (उदा. Ollama ज्याला Responses सपोर्ट आहे) आवश्यक आहे.\n\nस्कॅन दरम्यान क्रिया:\n- कोणत्याही GitHub मॉडेल्स कोड पाथसाठी काढून टाकण्याचा धोकाही रहदारी करा.\n\n---\n\n## फ्रेमवर्क स्थलांतर\n\nबरेच अ‍ॅप्स OpenAI वर उच्च-स्तरीय फ्रेमवर्क वापरतात. जेव्हा हे स्थलांतर करता, तेव्हा फक्त OpenAI कॉल्स नव्हे तर फ्रेमवर्कची स्वतःची API बदलते.\n\n### Microsoft एजंट फ्रेमवर्क (MAF)\n\n**आपला MAF व्हर्जन प्रथम तपासा** — स्थलांतर MAF 1.0.0+ किंवा 1.0.0 पूर्वीच्या बीटा\u002FRC वर अवलंबून आहे.\n\n#### MAF 1.0.0+ (agent-framework-openai >= 1.0.0)\n\n`OpenAIChatClient` **आधीच Responses API वापरतो** — स्थलांतर आवश्यक नाही. जर कोडबेस जुना `OpenAIChatCompletionClient` (जो `chat.completions.create` वापरतो) वापरत असेल, तर तो `OpenAIChatClient` ने बदला.\n\n| पूर्वी | नंतर |\n|--------|-------|\n| `from agent_framework.openai import OpenAIChatCompletionClient` | `from agent_framework.openai import OpenAIChatClient` |\n| `OpenAIChatCompletionClient(...)` | `OpenAIChatClient(...)` |\n\nतुम्ही कोणता व्हर्जन वापरत आहात हे तपासण्यासाठी: `python -c \"import agent_framework_openai; print(agent_framework_openai.__version__)\"`\n\n#### MAF पूर्व-1.0.0 (बीटा\u002FRC रिलीज)\n\nपूर्व-1.0.0 MAF मध्ये, `OpenAIChatClient` Chat Completions वापरत होता. `agent-framework-openai>=1.0.0` मध्ये अपग्रेड करा जिथे `OpenAIChatClient` डिफॉल्टने Responses API वापरतो.\n\nदुसरे कोणतेही बदल आवश्यक नाही — `Agent` आणि टूल API समान रहातात.\n\n### LangChain (`langchain-openai`)\n\n`ChatOpenAI()` मध्ये `use_responses_api=True` जोडा. तसेच प्रतिसाद प्रवेश `.content` कडून `.text` कडे बदला.\n\n| पूर्वी | नंतर |\n|--------|-------|\n| `ChatOpenAI(model=..., base_url=..., api_key=...)` | `ChatOpenAI(model=..., base_url=..., api_key=..., use_responses_api=True)` |\n| `result['messages'][-1].content` | `result['messages'][-1].text` |\n\nपूर्ण पूर्वी\u002Fनंतर कोड उदाहरणांसाठी, पहा [cheat-sheet.md](.\u002Freferences\u002Fcheat-sheet.md).\n\n---\n\n## फ्रंटेंड स्थलांतर मार्गदर्शन\n\n> **Responses API हे सर्व्हर-साइडचे बाब आहे.** तुमचा Python बॅकेंड स्थलांतर करा; फ्रंटेंडचा HTTP करार जवळजवळ बदलू नये जोपर्यंत तुमचा बॅकेंड एक लहान पास-थ्रू नसतो — त्या परिस्थितीत Responses विनंतीचे स्वरूप स्वीकारण्याचा विचार करा जेणेकरून भाषांतर थर टाळता येईल. जर फ्रंटेंड OpenAI ला थेट क्लायंट-साइड की सह कॉल करत असेल तर आधी ते कॉल बॅकेंडकडे हलवा.\n\n### `@microsoft\u002Fai-chat-protocol` चे डिप्रिसेशन\n\n`@microsoft\u002Fai-chat-protocol` एनपीएम पॅकेज डिप्रिकेटेड झाले आहे आणि ते [`ndjson-readablestream`](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fndjson-readablestream) ने बदला पाहिजे. फ्रंटेंडमध्ये आढळल्यास:\n\n1. CDN स्क्रिप्ट टॅग बदला:\n   ```html\n   \u003C!-- Before -->\n   \u003Cscript src=\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002F@microsoft\u002Fai-chat-protocol@...\u002Fdist\u002Fiife\u002Findex.js\">\u003C\u002Fscript>\n   \u003C!-- After -->\n   \u003Cscript src=\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Fndjson-readablestream@1.0.7\u002Fdist\u002Fndjson-readablestream.umd.js\">\u003C\u002Fscript>\n   ```\n2. `AIChatProtocolClient` ची इंस्टेंशिएशन (`new ChatProtocol.AIChatProtocolClient(\"\u002Fchat\")`) काढा.\n3. `client.getStreamedCompletion(messages)` ची जागा थेट `fetch()` कॉलने बॅकेंड स्ट्रीमिंग एंडपॉइंटला द्या.\n4. `for await (const response of result)` च्या जागी `for await (const chunk of readNDJSONStream(response.body))` वापरा.\n5. प्रॉपर्टी प्रवेश `response.delta.content` \u002F `response.error` कडून `chunk.delta.content` \u002F `chunk.error` कडे बदला.\n\n---\n\n## उद्दिष्टे\n\n- Azure OpenAI विरुद्ध Chat Completions किंवा जुने Completions वापरणाऱ्या सर्व Python कॉल साइट्सची गणना करा.\n- Python कोडबेससाठी स्थलांतर योजना आणि अनुक्रमण प्रस्तावित करा.\n- Responses API कडे सुरक्षित, लहान बदलाव करा.\n- कॉलर्सना Responses आउटपुट स्कीमा वापरायला अपडेट करा; मागील सुसंगततेचे व्रॅपर वापरू नका.\n- चाचण्या\u002Fलिंट्स चालवा; स्थलांतरामुळे उद्भवलेल्या लहान ब्रेक सुधारित करा.\n- लहान, पुनरावलोकनयोग्य बदल संच तयार करा आणि डीफ्ससह अंतिम सारांश द्या (कमिट करू नका).\n\n---\n\n## संरक्षण नियम\n\n- फक्त Git कार्यक्षेत्रातील फाइल्समध्ये बदल करा. कधीही बाहेर लिहू नका.\n- मागील सुसंगतता शिम्स ठेवल्या पाहिजेत नाहीत; कोड नवीन API स्वरूपात स्थलांतरित करा.\n- टॉम्बस्टोन\u002Fट्रांझिशन टिप्पण्या वा बॅकअप फाइल्स सोडू नका.\n- जर आधी स्ट्रीमिंग वापरले गेले असेल तर ते जपणूक करा; नाहीतर नॉन-स्ट्रीमिंग वापरा.\n- परवानगी मोडमध्ये असाल तर कमांड किंवा नेटवर्क कॉल्स चालवण्यापूर्वी मान्यता घ्या.\n- `git add`\u002F`git commit`\u002F`git push` चालवू नका; फक्त कार्यरत ट्री संपादने तयार करा.\n\n---\n\n## पाऊल 0: Azure OpenAI क्लायंट स्थलांतर (आधीच गरजेचे)\n\nजर कोडबेस `AzureOpenAI` किंवा `AsyncAzureOpenAI` कन्स्ट्रक्टर्स वापरत असेल तर आधीच ते मानक `OpenAI` \u002F `AsyncOpenAI` कन्स्ट्रक्टर्सकडे स्थलांतर करा. Azure-विशिष्ट कन्स्ट्रक्टर्स `openai>=1.108.1` मध्ये डिप्रिकेटेड आहेत.\n\n### का v1 API मार्ग?\n\nनवीन `\u002Fopenai\u002Fv1` एंडपॉइंट `AzureOpenAI()` च्या ऐवजी मानक `OpenAI()` क्लायंट वापरतो, `api_version` पॅरामीटरची आवश्यकता नाही, आणि OpenAI व Azure OpenAI दोन्हीवर समान कार्य करतो. त्याच क्लायंट कोडमुळे भविष्यातील आवृत्ती व्यवस्थापन आवश्यक नाही.\n\n### मुख्य बदल\n\n| पूर्वी | नंतर |\n|--------|-------|\n| `AzureOpenAI` | `OpenAI` |\n| `AsyncAzureOpenAI` | `AsyncOpenAI` |\n| `azure_endpoint` | `base_url` |\n| `azure_ad_token_provider` | `api_key` |\n| `api_version=...` | पूर्णपणे काढा |\n\n### स्वच्छता तपासणी यादी\n\n- क्लायंट तयार करताना `api_version` आर्ग्युमेंट काढा.\n- `.env`, अ‍ॅप सेटिंग्ज, Bicep\u002Fइन्फ्रा फाइल्समधून `AZURE_OPENAI_VERSION` \u002F `AZURE_OPENAI_API_VERSION` एन्व्ह वेरिएबल काढा.\n- `.env`, अ‍ॅप सेटिंग्ज, Bicep\u002Fइन्फ्रा आणि चाचणी फिक्स्चरमध्ये `AZURE_OPENAI_CLIENT_ID` चे नाव बदलून `AZURE_CLIENT_ID` करा (मानक Azure Identity SDK कन्व्हेन्शन).\n- `requirements.txt` किंवा `pyproject.toml` मध्ये `openai>=1.108.1` सुनिश्चित करा.\n\n### वातावरण वेरिएबल स्थलांतर\n\n| जुने एन्व्ह वेरिएबल | कृती | टीपा |\n|-------------|--------|-------|\n| `AZURE_OPENAI_VERSION` | **काढा** | v1 एंडपॉइंटसह `api_version` आवश्यक नाही |\n| `AZURE_OPENAI_API_VERSION` | **काढा** | वरच्याचप्रमाणे |\n| `AZURE_OPENAI_CLIENT_ID` | **नाव बदला** → `AZURE_CLIENT_ID` | `ManagedIdentityCredential(client_id=...)` साठी मानक Azure Identity SDK कन्व्हेन्शन |\n| `AZURE_OPENAI_ENDPOINT` | **ठेवा** | `base_url` तयार करण्यासाठी आवश्यक आहे |\n| `AZURE_OPENAI_CHAT_DEPLOYMENT` | **ठेवा** | `responses.create` मध्ये `model` पॅरामीटर म्हणून वापरले जाते |\n| `AZURE_OPENAI_API_KEY` | **ठेवा** | की-आधारित प्रमाणीकरणासाठी `api_key` म्हणून वापरले जाते |\n\nक्लायंट सेटअप कोड उदाहरणांसाठी (सिंक, अ‍ॅसिंक, EntraID, API की, मल्टी-टेनंट), पहा [cheat-sheet.md](.\u002Freferences\u002Fcheat-sheet.md).\n\n---\n\n## पाऊल 1: जुने कॉल साइट शोधा\n\nस्थलांतर आवश्यक असलेल्या सर्व कॉल साइट्स शोधण्यासाठी [detect_legacy.py](..\u002F..\u002F..\u002F..\u002F..\u002F.agents\u002Fskills\u002Fazure-openai-to-responses\u002Fscripts\u002Fdetect_legacy.py) स्क्रिप्ट चालवा:\n\n```bash\npython skills\u002Fazure-openai-to-responses\u002Fscripts\u002Fdetect_legacy.py .\n```\n\nकिंवा हे शोध स्वतः करा — प्रत्येक जुळणारा स्थलांतराचा उद्देश आहे:\n\n```bash\n# लेगसी API कॉल्स (पुन्हा लिहावे लागेल)\nrg \"chat\\.completions\\.create\"\nrg \"ChatCompletion\\.create\"\nrg \"Completion\\.create\"\n\n# बंद केलेले Azure क्लायंट कंस्ट्रक्टर्स (बदला करावा लागेल)\nrg \"AzureOpenAI\\(\"\nrg \"AsyncAzureOpenAI\\(\"\n\n# प्रतिसादाचे स्वरूप उपलब्धीचे नमुने (अपडेट करणे आवश्यक आहे)\nrg \"choices\\[0\\]\\.message\\.content\"\nrg \"choices\\[0\\]\\.delta\\.content\"\nrg \"choices\\[0\\]\\.message\\.function_call\"\nrg \"choices\\[0\\]\\.message\\.tool_calls\"\n\n# जुना नेस्टेड फॉर्मॅटमधील टूल डिफिनिशन्स (सोप्या स्वरूपात मदत करा)\nrg '\"function\":\\s*{\\s*\"name\"'\nrg \"pydantic_function_tool\"\n\n# जुना फॉर्मॅटमधील टूल निकाल (function_call_output मध्ये रूपांतर करावे)\nrg '\"role\":\\s*\"tool\"'\nrg '\"tool_call_id\"'\n\n# बंद केलेले पॅरामीटर्स (काढून टाकावे किंवा नाव बदलावे)\nrg \"response_format\"\nrg \"max_tokens\\b\"        # max_output_tokens असे नाव द्या\nrg \"['\\\"]seed['\\\"]\"      # remove entirely\n\n# बंद केलेले env व्हेरिएबल्स (साफसफाई करा)\nrg \"AZURE_OPENAI_API_VERSION|AZURE_OPENAI_VERSION\"\nrg \"AZURE_OPENAI_CLIENT_ID\"  # AZURE_CLIENT_ID असावे\n\n# GitHub मॉडेल्स एंडपॉइंट्स (काढून टाका — Responses APIला समर्थित नाही)\nrg \"models\\.github\\.ai|models\\.inference\\.ai\\.azure\"\n\n# फ्रेमवर्क-स्तरीय लेगसी नमुने (अपडेट करणे आवश्यक आहे)\nrg \"OpenAIChatCompletionClient\"  # MAF 1.0.0+: OpenAIChatClient ने बदला करा\nrg \"ChatOpenAI\\(\" | grep -v \"use_responses_api\"  # LangChain: use_responses_api=True आवश्यक आहे\n\n# चाचणी पायाभूत सुविधा (अपडेट करणे आवश्यक आहे)\nrg \"ChatCompletionChunk|AsyncCompletions\\.create\" tests\u002F\nrg \"_azure_ad_token_provider\" tests\u002F\nrg \"prompt_filter_results|content_filter_results\" tests\u002F\nrg \"choices\\[0\\]\" tests\u002F\n\n# कंटेंट फिल्टर त्रुटी बॉडी ऍक्सेस (अपडेट करा — रचना बदलली आहे)\nrg 'innererror.*content_filter_result|error\\.body\\[\"innererror\"\\]'\nrg \"content_filter_result\\[\" # जुना एकवचनी स्वरूप — आता content_filter_results (बहुवचनी) content_filters ऍरेमध्ये आहे\n\n# Chat Completions एंडपॉइंटसाठी रॉ HTTP कॉल्स (URL अपडेट करा)\nrg \"\u002Fopenai\u002Fdeployments\u002F.*\u002Fchat\u002Fcompletions\"\nrg \"api-version=\"\n```\n\n### नियम (ओळखा आणि पुन्हा लिहा)\n\n- **Chat Completions क्लायंट**: `client.chat.completions.create` → `client.responses.create(...)`.\n\n- **Azure क्लायंट कन्स्ट्रक्टर**: `AzureOpenAI(...)` → `OpenAI(base_url=..., api_key=...)`.\n- **टूल्स**: फंक्शन-कॉलिंग टूल डिफिनिशन्सचे नेस्टेड फॉरमॅट (`{\"type\": \"function\", \"function\": {\"name\": ...}}`) मधून फ्लॅट Responses फॉरमॅट (`{\"type\": \"function\", \"name\": ...}`) येथे कन्व्हर्ट करा; `tool_choice` वापरा; टूल निकाल परत करा `{\"type\": \"function_call_output\", \"call_id\": ..., \"output\": ...}` आयटम्स (नाहीतर `{\"role\": \"tool\", ...}`).\n- **टूल राऊंड-ट्रिप्स**: जेव्हा मॉडेल फंक्शन कॉल परत करते, तेव्हा `response.output` आयटम संभाषणात जोडा (मॅन्युअल `{\"role\": \"assistant\", \"tool_calls\": [...]}` डिक्ट नाही), नंतर प्रत्येकी निकालासाठी `function_call_output` आयटम जोडा.\n- **फ्यु-शॉट टूल उदा.**: जर संभाषणामध्ये हार्डकोडेड टूल कॉल उदाहरणे असतील, तर त्यांना `{\"type\": \"function_call\", \"id\": \"fc_...\", \"call_id\": \"fc_...\", ...}` + `{\"type\": \"function_call_output\", ...}` आयटम्समध्ये रूपांतरित करा. IDs नेहमी `fc_` वर सुरू होणे आवश्यक आहे.\n- **`pydantic_function_tool()`**: हा हेल्पर अजूनही जुना नेस्टेड फॉरमॅट तयार करतो आणि `responses.create()` सोबत **सुसंगत नाही**. मॅन्युअल टूल डिफिनिशन्स किंवा फ्लॅटिंग wrapper वापरून बदल करा.\n- **मल्टी-टर्न**: अॅपमध्ये संभाषण इतिहास सांगा; मागील टर्न `input` आयटम्सद्वारे पास करा.\n- **फॉरमॅटिंग**: Chat च्या टॉप-लेव्हल `response_format` चा वापर टाळा, Responses मध्ये `text.format` वापरा. कॅनॉनिकल स्वरूप: `text={\"format\": {\"type\": \"json_schema\", \"name\": \"Output\", \"strict\": True, \"schema\": {...}}}`.\n- **कंटेंट आयटम्स**: Chat मध्ये `content[].type: \"text\"` बदला Responses मध्ये `content[].type: \"input_text\"` असे, वापरकर्ता\u002Fसिस्टम टर्नसाठी.\n- **इमेज कंटेंट आयटम्स**: Chat मध्ये `content[].type: \"image_url\"` च्या जागी Responses मध्ये `content[].type: \"input_image\"` वापरा. `image_url` फील्ड एक नेस्टेड ऑब्जेक्ट `{\"url\": \"...\"}` मधून फ्लॅट स्ट्रिंगमध्ये बदलेल. पूर्व आणि नंतरच्या उदाहरणांसाठी चीट शीट बघा.\n- **रिजनिंग प्रयत्न**: **फक्त तेव्हाच `reasoning` माईग्रेट करा जे मूळ कोडमध्ये आधीपासून आहे**.\n- **कंटेंट फिल्टर त्रुटी हँडलिंग**: त्रुटीचा बॉडी स्ट्रक्चर बदलला आहे. Chat Completions मध्ये `error.body[\"innererror\"][\"content_filter_result\"]` (एकवचन); Responses API मध्ये `error.body[\"content_filters\"][0][\"content_filter_results\"]` (बहुवचन, अर्रेमध्ये). ज्या कोडने `innererror` ला ऍक्सेस केले आहे तो `KeyError` देते. नवीन पथ वापरा.\n- **रॉ HTTP कॉल्स**: जर अॅप थेट Azure OpenAI REST API कॉल करत असेल (`requests`, `httpx` इत्यादीद्वारे) `\u002Fopenai\u002Fdeployments\u002F{name}\u002Fchat\u002Fcompletions?api-version=...`, तर ते `\u002Fopenai\u002Fv1\u002Fresponses` मध्ये पुनर्लेखन करा. रिक्वेस्ट बॉडी बदलते: `messages` → `input`, `max_output_tokens` जोडा आणि `store: false`, `api-version` क्वेरी पॅराम काढा. रिस्पॉन्स बॉडी बदलते: `choices[0].message.content` → `output[0].content[0].text` (टीप: `output_text` हे SDK चं एक सोयीचे प्रॉपर्टी असून ते थेट REST JSON मध्ये नसतं).\n\n---\n\n## स्टेप 2: माईग्रेशन लागू करा\n\n### माईग्रेशन नोट्स (Chat Completions → Responses)\n\n- **माईग्रेट का करायचे**: Responses हा टेक्स्ट, टूल्स आणि स्ट्रीमिंगसाठी एकत्रित API आहे; Chat Completions जुनाट आहे. GPT-5 सह Responses सर्वोत्तम कामगिरीसाठी आवश्यक आहे.\n- **HTTP**: Azure एंडपॉईंट `\u002Fopenai\u002Fdeployments\u002F{name}\u002Fchat\u002Fcompletions` वरून `\u002Fopenai\u002Fv1\u002Fresponses` मध्ये बदलतो.\n- **फील्डस्**: `messages` → `input`, `max_tokens` → `max_output_tokens`. `temperature` जसेचे तसे राहते.\n- **फॉरमॅटिंग**: `response_format` → `text.format` (योग्य ऑब्जेक्टसह).\n- **कंटेंट आयटम्स**: System\u002FUser टर्नसाठी Chat मध्ये `content[].type: \"text\"` बदला Responses मध्ये `content[].type: \"input_text\"`.\n- **इमेज कंटेंट आयटम्स**: Chat मध्ये `content[].type: \"image_url\"` बदला Responses मध्ये `content[].type: \"input_image\"`. `image_url` फील्ड `{\"image_url\": {\"url\": \"...\"}}` पासून `{\"image_url\": \"...\"}` (साधा स्ट्रिंग — HTTPS URL किंवा `data:image\u002F...;base64,...` डेटा URI) मध्ये बदला.\n\n### पॅरामीटर मॅपिंग संदर्भ\n\n| Chat Completions | Responses API |\n|-----------------|---------------|\n| `prompt` | `input` |\n| `messages` | `input` (आयटम्सची अ‍ॅरे) |\n| `max_tokens` | `max_output_tokens` |\n| `response_format` | `text.format` (ऑब्जेक्ट) |\n| `temperature` | `temperature` (बदलेले नाही) |\n| `stop` | `stop` (बदलेले नाही) |\n| `frequency_penalty` | `frequency_penalty` (बदलेले नाही) |\n| `presence_penalty` | `presence_penalty` (बदलेले नाही) |\n| `tools` \u002F function-calling | `tools` (बदलेले नाही) |\n| `seed` | **काढून टाका** (सपोर्टेड नाही) |\n| `store` | `store` (सेट करा `false`) |\n| `content[].type: \"text\"` | `content[].type: \"input_text\"` |\n| `content[].type: \"image_url\"` | `content[].type: \"input_image\"` |\n| `\"image_url\": {\"url\": \"...\"}` | `\"image_url\": \"...\"` (फ्लॅट स्ट्रिंग) |\n\nपूर्णपूर्व आणि नंतरच्या कोड उदाहरणांसाठी [cheat-sheet.md](.\u002Freferences\u002Fcheat-sheet.md) पहा.\n\nटेस्ट इन्फ्रास्ट्रक्चर माईग्रेशनसाठी (मॉक्स, स्नॅपशॉट्स, अ‍ॅसर्शन) [test-migration.md](.\u002Freferences\u002Ftest-migration.md) पहा.\n\nत्रुटी निराकरण आणि लेक्शीन्ससाठी [troubleshooting.md](.\u002Freferences\u002Ftroubleshooting.md) पहा.\n\n---\n\n## डेटा रिटेन्शन आणि स्थिती\n\n- सर्व Responses विनंत्यांवर `store: false` सेट करा.\n- मागील मेसेज ID किंवा सर्व्हर-संग्रहीत संदर्भावर अवलंबून राहू नका; स्थिती क्लायंट-व्यवस्थापित ठेवा आणि मेटाडेटा कमी करा.\n\n---\n\n## स्वीकार्यता निकष\n\n### कोड-स्तरीय गेट्स (सर्व पास व्हावेत)\n\n- [ ] `rg \"chat\\.completions\\.create|ChatCompletion\\.create|Completion\\.create\"` साठी माईग्रेट केलेल्या फाइल्समध्ये जुळणारे कोणतेही नसेल.\n- [ ] `rg \"AzureOpenAI\\(|AsyncAzureOpenAI\\(\"` साठी शून्य मॅचेस — सर्व कन्स्ट्रक्टर `OpenAI`\u002F`AsyncOpenAI` वापरतात v1 एंडपॉईंटसह.\n- [ ] `rg \"models\\.github\\.ai|models\\.inference\\.ai\\.azure\"` साठी शून्य मॅचेस — GitHub Models कोड काढलेले.\n- [ ] `rg \"OpenAIChatCompletionClient\"` साठी शून्य मॅचेस — MAF 1.0.0+ कोड `OpenAIChatClient` वापरतो (जो Responses API वापरतो). प्री-1.0.0 मध्ये `agent-framework-openai>=1.0.0` मध्ये अपग्रेड करा.\n- [ ] सर्व `ChatOpenAI(...)` कॉल्स मध्ये `use_responses_api=True` आहे.\n- [ ] `rg \"choices\\[0\\]\"` साठी शून्य मॅचेस — सर्व प्रतिसादासाठी ऍक्सेस `resp.output_text` किंवा Responses आउटपुट स्कीमा वापरते.\n- [ ] टॉप लेव्हलवर `response_format` नाही; सर्व स्ट्रक्चर्ड आउटपुट `text={\"format\": {...}}` वापरतो.\n- [ ] `openai>=1.108.1` आणि `azure-identity` `requirements.txt` किंवा `pyproject.toml` मध्ये; dependency पुन्हा इन्स्टॉल केलेली.\n- [ ] प्रत्येक `responses.create` कॉलवर `store=False` सेट केलेले.\n- [ ] क्लायंट कन्स्ट्रक्शनमध्ये `api_version` नाही; `AZURE_OPENAI_API_VERSION` एन्व्ह फाइल्स आणि इन्फ्रातून काढले आहे.\n\n### टेस्ट इन्फ्रास्ट्रक्चर गेट्स (सर्व पास व्हावेत)\n\n- [ ] `rg \"ChatCompletionChunk|AsyncCompletions\\.create|chat\\.completions\" tests\u002F` साठी शून्य मॅचेस.\n- [ ] `rg \"_azure_ad_token_provider\" tests\u002F` साठी शून्य मॅचेस — अ‍ॅसर्शन अपडेट केलेले आहेत `isinstance(client, AsyncOpenAI)` किंवा `base_url` तपासण्यासाठी.\n- [ ] `rg \"prompt_filter_results|content_filter_results\" tests\u002F` साठी शून्य मॅचेस — Azure-विशिष्ट फिल्टर मॉक्स काढलेले.\n- [ ] मॉक फिक्स्चर्स `kwargs.get(\"input\")` वापरतात, `kwargs.get(\"messages\")` नाही.\n- [ ] स्नॅपशॉट \u002F गोल्डन फाइल्स Responses स्ट्रीमिंग स्वरूपात अपडेट केल्या (कोणतीही `choices[0]`, `function_call`, `logprobs` नाहीत).\n- [ ] सर्व टेस्ट अपडेट्सनंतर `pytest` शून्य यश-अपयशांसह पास झाला.\n\n### वर्तणुकीचे निकष (मॅन्युअली किंवा टेस्ट हर्नेसद्वारे तपासा)\n\n- [ ] **मूलभूत पूर्णता**: नॉन-स्ट्रीमिंग `responses.create` रिक्त नसलेले `output_text` परत करते.\n- [ ] **स्ट्रीम समता**: मूळ कोडने स्ट्रीमिंग वापरले असल्यास, माईग्रेटेड कोड स्ट्रीम करतो आणि रिक्त नसलेल्या `response.output_text.delta` इव्हेंट्स यील्ड करतो.\n- [ ] **स्ट्रक्चर्ड आउटपुट**: `text.format` वापरता `json_schema` सह, `json.loads(resp.output_text)` यशस्वी होते आणि स्कीमाशी जुळते.\n- [ ] **टूल-कॉल लूप**: टूल्स वापरले असतील तर मॉडेल टूल कॉल्स करते, अॅप त्यांना अंमलात आणतो, आणि नंतरच्या विनंतीमध्ये अंतिम `output_text` परत येतो (अमर्यादित लूप नाही).\n- [ ] **असिंक्रोनस समता**: जर `AsyncAzureOpenAI` वापरले असेल, तर `AsyncOpenAI` समतुल्य `await` सह काम करते.\n- [ ] **त्रुटी दर**: माईग्रेशनपूर्वीच्या तुलनेत कोणतीही नवीन 400\u002F401\u002F404 त्रुटी नाहीत.\n\n### देयके\n\n- संपादित फाइल्सचा सारांश, पूर्व\u002Fनंतर लेगसी कॉल साइट्सची गणना, पुढील पावले.\n- बदल कार्यप्रवाहातील संपादने आहेत (कोणतेही कमिट नाहीत).\n\n---\n\n## SDK आवृत्ती आवश्यकता\n\n| पॅकेज | किमान आवृत्ती |\n|---------|----------------|\n| `openai` | `>=1.108.1` |\n| `azure-identity` | लेटेस्ट (EntraID ऑथसाठी) |\n\n---\n\n## संदर्भ\n\n- [चीट शीट — सर्व कोड स्निपेट्स](.\u002Freferences\u002Fcheat-sheet.md)\n- [टेस्ट माईग्रेशन — मॉक, स्नॅपशॉट्स, अ‍ॅसर्शन](.\u002Freferences\u002Ftest-migration.md)\n- [त्रुटी निराकरण — त्रुटी, धोका तालिका, अडचणी](.\u002Freferences\u002Ftroubleshooting.md)\n- [detect_legacy.py — स्वयंचलित स्कॅनर](..\u002F..\u002F..\u002F..\u002F..\u002F.agents\u002Fskills\u002Fazure-openai-to-responses\u002Fscripts\u002Fdetect_legacy.py)\n- [Azure OpenAI स्टार्टर किट](https:\u002F\u002Faka.ms\u002Fopenai\u002Fstart)\n- [Azure OpenAI Responses API डॉक्स](https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fai-foundry\u002Fopenai\u002Fhow-to\u002Fresponses)\n- [Azure OpenAI API आवृत्ती जीवनचक्र](https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fai-foundry\u002Fopenai\u002Fapi-version-lifecycle?view=foundry-classic&tabs=python#api-evolution)\n- [OpenAI Responses API संदर्भ](https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fapi-reference\u002Fresponses)\n\n---\n\n\u003C!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**अस्वीकरण**:\nहा दस्तऐवज AI भाषांतर सेवा [Co-op Translator](https:\u002F\u002Fgithub.com\u002FAzure\u002Fco-op-translator) चा वापर करून अनुवादित केला आहे. जरी आम्ही अचूकतेसाठी प्रयत्न करतो, तरी कृपया लक्षात घ्या की स्वयंचलित भाषांतरांमध्ये त्रुटी किंवा अचूकतेची कमतरता असू शकते. मूळ दस्तऐवज त्याच्या मूळ भाषेत अधिकृत स्रोत मानला पाहिजे. महत्त्वाची माहिती असल्यास, व्यावसायिक मानवी भाषांतराची शिफारस केली जाते. या भाषांतराच्या वापरामुळे उद्भवणाऱ्या कोणत्याही गैरसमज किंवा चुकीच्या अर्थलावणीसाठी आम्ही जबाबदार नाही.\n\u003C!-- CO-OP TRANSLATOR DISCLAIMER END -->","# Azure OpenAI Chat Completions कडून Responses API कडे Python अ‍ॅप्सचे स्थलांतर करा\n\n> **अधिकृत मार्गदर्शन — नेमके पालन करा**\n>\n> हा कौशल्य Azure OpenAI Chat Completions वापरणारे Python कोडबेस Responses API या एकत्रित अनुप्रयोगाकडे स्थलांतरित करतो.\n> कृपया या सूचनांचे अचूक पालन करा.\n> पॅरामीटर मॅपिंगमध्ये अनिश्चितता करू नका किंवा API चे स्वरूप बनवू नका.\n\n---\n\n## ट्रिगर्स\n\nवापरकर्ता जेव्हा इच्छितो तेव्हा हा कौशल्य सक्रिय करा:\n- Azure OpenAI Chat Completions कडून Responses API कडे Python अ‍ॅप स्थलांतर करा\n- Azure OpenAI विरुद्ध नवीनतम API स्वरूपासाठी Python OpenAI SDK वापर सुधारित करा\n- GPT-5 किंवा नवीन मॉडेलसाठी Python कोड तयार करा ज्यांना Azure वर Responses API ची आवश्यकता आहे\n- `AzureOpenAI`\u002F`AsyncAzureOpenAI` कडून मानक `OpenAI`\u002F`AsyncOpenAI` क्लायंटकडे v1 एंडपॉइंटसह बदला\n- `AzureOpenAI` कन्स्ट्रक्टर्स किंवा `api_version` संबंधित डिप्रिकेटेड चेतावण्या दुरुस्त करा\n\n---\n\n## ⚠️ मॉडेल सुसंगतता — प्रथम तपासा\n\n> **स्थलांतर करण्यापूर्वी, खात्री करा की तुमचा Azure OpenAI डिप्लॉयमेंट Responses API ला सपोर्ट करतो.**\n\n### 1. तुमच्या डिप्लॉयमेंटची स्मोक-टेस्ट करा (सर्वात जलद)\n\n```python\nimport os\nfrom openai import OpenAI\n\nclient = OpenAI(\n    api_key=os.environ[\"AZURE_OPENAI_API_KEY\"],\n    base_url=f\"{os.environ['AZURE_OPENAI_ENDPOINT'].rstrip('\u002F')}\u002Fopenai\u002Fv1\u002F\",\n)\n\ntry:\n    resp = client.responses.create(\n        model=os.environ[\"AZURE_OPENAI_DEPLOYMENT\"],\n        input=\"ping\",\n        max_output_tokens=50,\n        store=False,\n    )\n    print(f\"✅ Deployment supports Responses API: {resp.output_text}\")\nexcept Exception as e:\n    print(f\"❌ Deployment does NOT support Responses API: {e}\")\n```\n\n> **सूचना**: Azure OpenAI वर `max_output_tokens` किमान 16 आहे. 16 पेक्षा कमी मूल्ये 400 त्रुटी परत करतात. स्मोक टेस्टसाठी 50+ वापरा.\n\nजर 404 परत आला तर डिप्लॉयमेंटच्या मॉडेलने अजून Responses सपोर्ट केलेले नाही — खालील संदर्भ तपासा किंवा समर्थित मॉडेलसह पुन्हा डिप्लॉय करा.\n\n### 2. तुमच्या प्रदेशातील उपलब्ध मॉडेल तपासा (शिफारस केली जाते)\n\nResponses API सपोर्टसह तुमच्या विशिष्ट प्रदेशात काय उपलब्ध आहे ते पाहण्यासाठी अंगभूत मॉडेल सुसंगतता साधन चालवा:\n\n```bash\npython migrate.py models --subscription YOUR_SUB_ID --location YOUR_REGION\n```\n\nहे Azure ARM ला थेट क्वेरी करते आणि सुसंगतता मॅट्रिक्स दाखवते — कोणते मॉडेल्स Responses, संरचित आउटपुट, टूल्स इ. सपोर्ट करतात. `--filter gpt-5.1,gpt-5.2` वापरून निकाल कमी करा किंवा स्क्रिप्टिंगसाठी `--json` वापरा.\n\n### 3. पूर्ण मॉडेल सपोर्ट संदर्भ\n\n- **थेट क्वेरी**: `python migrate.py models` (वरीलप्रमाणे — प्रदेश-विशिष्ट, सदैव अद्ययावत)\n- **उपलब्धता ब्राउझ करा**: [मॉडेल सारांश तक्ती आणि प्रदेश उपलब्धता](https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Ffoundry\u002Ffoundry-models\u002Fconcepts\u002Fmodels-sold-directly-by-azure?tabs=global-standard-aoai%2Cglobal-standard&pivots=azure-openai#model-summary-table-and-region-availability)\n- **क्विकस्टार्ट & मार्गदर्शन**: **https:\u002F\u002Faka.ms\u002Fopenai\u002Fstart**\n\n### ⚠️ जुने मॉडेल मर्यादा\n\n> **इशारा**: जुन्या मॉडेल्स (`gpt-4.1` पूर्वीचे) कदाचित Responses API चे सर्व फिचर पूर्णपणे समर्थित करू शकत नाहीत.\n>\n> जुन्या मॉडेल्ससह ओळखल्या गेलेल्या मर्यादा:\n> - **`reasoning` पॅरामीटर**: अनेक नॉन-रीझनिंग मॉडेल्सवर समर्थित नाही. मूळ कोडमध्ये असेल तरच `reasoning` स्थलांतर करा.\n> - **`seed` पॅरामीटर**: Responses API मध्ये अजिबात समर्थित नाही — सर्व विनंत्यांमधून काढा.\n> - **`text.format` द्वारे संरचित आउटपुट**: जुन्या मॉडेल्स कदाचित `strict: true` JSON स्कीमा विश्वसनीयपणे लागू करू शकत नाहीत.\n> - **टूल ऑर्केस्ट्रेशन**: GPT-5+ अंतर्गत रीझनिंगचा भाग म्हणून टूल कॉल्सचे नियोजन करते. जुन्या Responses मॉडेल्स चालतात पण सखोल समाकलन नसते.\n> - **तापमान मर्यादा**: `gpt-5` कडे स्थलांतर करताना तापमान टाळावे किंवा `1` वर सेट करावे. जुन्या मॉडेल्सवर अशी मर्यादा नाही.\n\n### O-सीरीज रीझनिंग मॉडेल्स (o1, o3-mini, o3, o4-mini)\n\nO-सीरीज मॉडेल्सना विशेष पॅरामीटर मर्यादा असतात. जेव्हा o-सीरीज मॉडेल्ससाठी अ‍ॅप्स स्थलांतरित करत असाल:\n\n- **`temperature`**: `1` असणे आवश्यक (किंवा वगळा). O-सीरीज मॉडेल्स इतर मूल्य स्वीकारत नाहीत.\n- **`max_completion_tokens` → `max_output_tokens`**: Azure-विशिष्ट `max_completion_tokens` वापरणारे अ‍ॅप्स `max_output_tokens` कडे स्विच करा. reasoning टोकन्समुळे मर्यादा जास्त ठेवा (4096+).\n- **`reasoning_effort`**: अ‍ॅपमध्ये `reasoning_effort` (low\u002Fmedium\u002Fhigh) वापरले असेल तर ठेवा — Responses API o-सीरीज मॉडेल्ससाठी हे पॅरामीटर सपोर्ट करते.\n- **स्ट्रीमिंग वर्तन**: O-सीरीज मॉडेल्स रीझनिंग पूर्ण होईपर्यंत आउटपुट बफर करू शकतात आणि नंतर टेक्स्ट डेल्टा इव्हेंट्स पाठवतात. स्ट्रीमिंग चालू राहते, पण GPT मॉडेल्सच्या तुलनेत पहिला `response.output_text.delta` देरीने येऊ शकतो.\n- **`top_p`**: O-सीरीजवर समर्थित नाही — असल्यास काढा.\n- **टूल वापर**: O-सीरीज मॉडेल्स Responses API द्वारे GPT मॉडेल्ससारखे टूल्स सपोर्ट करतात, पण टूल कॉल ऑर्केस्ट्रेशन गुणवत्ता मॉडेलनुसार वेगळी आहे.\n\n**क्रिया — सक्रिय मॉडेल सल्ला**: स्कॅन टप्प्यात अ‍ॅप कोणत्या मॉडेलसाठी टार्गेट करते ते तपासा (डिप्लॉयमेंट नावे, एन्व्ह वेरिएबल्स, कॉन्फिग). मॉडेल जर `gpt-4.1` पूर्वीचे असेल तर वापरकर्त्याला पुढील सूचना द्या:\n- स्थलांतर त्याच्या सध्याच्या मॉडेलवर बेसिक टेक्स्ट, चॅट, स्ट्रीमिंग, आणि टूल्ससाठी काम करेल.\n- नवीन मॉडेल्स (`gpt-5.1`, `gpt-5.2`) चांगले टूल ऑर्केस्ट्रेशन, संरचित आउटपुट अंमलबजावणी, रीझनिंग, आणि क्रॉस-रिजन उपलब्धता देतात.\n- त्यांना जेव्हा तयार वाटेल तेव्हा डिप्लॉयमेंट अपग्रेड करण्याचा विचार करावा — हे स्थलांतराला अडथळा ठरत नाही.\n\nमॉडेल आवृत्तीवर आधारित स्थलांतर थांबवू किंवा नकार देऊ नका. हा सल्ला माहितीपर आहे.\n\n### GitHub मॉडेल्स Responses API ला सपोर्ट करत नाहीत\n\n> **GitHub मॉडेल्स (`models.github.ai`, `models.inference.ai.azure.com`) Responses API ला सपोर्ट करत नाहीत.**\n\nजर कोडबेसमध्ये GitHub मॉडेल्सचा कोड पथ असेल (`base_url` जे `models.github.ai` किंवा `models.inference.ai.azure.com` कडे निर्देशित करतो), तर **स्थलांतर दरम्यान पूर्णपणे काढून टाका**. Responses API साठी Azure OpenAI, OpenAI, किंवा जुळणारा लोकल एंडपॉइंट (उदा. Ollama ज्याला Responses सपोर्ट आहे) आवश्यक आहे.\n\nस्कॅन दरम्यान क्रिया:\n- कोणत्याही GitHub मॉडेल्स कोड पाथसाठी काढून टाकण्याचा धोकाही रहदारी करा.\n\n---\n\n## फ्रेमवर्क स्थलांतर\n\nबरेच अ‍ॅप्स OpenAI वर उच्च-स्तरीय फ्रेमवर्क वापरतात. जेव्हा हे स्थलांतर करता, तेव्हा फक्त OpenAI कॉल्स नव्हे तर फ्रेमवर्कची स्वतःची API बदलते.\n\n### Microsoft एजंट फ्रेमवर्क (MAF)\n\n**आपला MAF व्हर्जन प्रथम तपासा** — स्थलांतर MAF 1.0.0+ किंवा 1.0.0 पूर्वीच्या बीटा\u002FRC वर अवलंबून आहे.\n\n#### MAF 1.0.0+ (agent-framework-openai >= 1.0.0)\n\n`OpenAIChatClient` **आधीच Responses API वापरतो** — स्थलांतर आवश्यक नाही. जर कोडबेस जुना `OpenAIChatCompletionClient` (जो `chat.completions.create` वापरतो) वापरत असेल, तर तो `OpenAIChatClient` ने बदला.\n\n| पूर्वी | नंतर |\n|--------|-------|\n| `from agent_framework.openai import OpenAIChatCompletionClient` | `from agent_framework.openai import OpenAIChatClient` |\n| `OpenAIChatCompletionClient(...)` | `OpenAIChatClient(...)` |\n\nतुम्ही कोणता व्हर्जन वापरत आहात हे तपासण्यासाठी: `python -c \"import agent_framework_openai; print(agent_framework_openai.__version__)\"`\n\n#### MAF पूर्व-1.0.0 (बीटा\u002FRC रिलीज)\n\nपूर्व-1.0.0 MAF मध्ये, `OpenAIChatClient` Chat Completions वापरत होता. `agent-framework-openai>=1.0.0` मध्ये अपग्रेड करा जिथे `OpenAIChatClient` डिफॉल्टने Responses API वापरतो.\n\nदुसरे कोणतेही बदल आवश्यक नाही — `Agent` आणि टूल API समान रहातात.\n\n### LangChain (`langchain-openai`)\n\n`ChatOpenAI()` मध्ये `use_responses_api=True` जोडा. तसेच प्रतिसाद प्रवेश `.content` कडून `.text` कडे बदला.\n\n| पूर्वी | नंतर |\n|--------|-------|\n| `ChatOpenAI(model=..., base_url=..., api_key=...)` | `ChatOpenAI(model=..., base_url=..., api_key=..., use_responses_api=True)` |\n| `result['messages'][-1].content` | `result['messages'][-1].text` |\n\nपूर्ण पूर्वी\u002Fनंतर कोड उदाहरणांसाठी, पहा [cheat-sheet.md](.\u002Freferences\u002Fcheat-sheet.md).\n\n---\n\n## फ्रंटेंड स्थलांतर मार्गदर्शन\n\n> **Responses API हे सर्व्हर-साइडचे बाब आहे.** तुमचा Python बॅकेंड स्थलांतर करा; फ्रंटेंडचा HTTP करार जवळजवळ बदलू नये जोपर्यंत तुमचा बॅकेंड एक लहान पास-थ्रू नसतो — त्या परिस्थितीत Responses विनंतीचे स्वरूप स्वीकारण्याचा विचार करा जेणेकरून भाषांतर थर टाळता येईल. जर फ्रंटेंड OpenAI ला थेट क्लायंट-साइड की सह कॉल करत असेल तर आधी ते कॉल बॅकेंडकडे हलवा.\n\n### `@microsoft\u002Fai-chat-protocol` चे डिप्रिसेशन\n\n`@microsoft\u002Fai-chat-protocol` एनपीएम पॅकेज डिप्रिकेटेड झाले आहे आणि ते [`ndjson-readablestream`](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fndjson-readablestream) ने बदला पाहिजे. फ्रंटेंडमध्ये आढळल्यास:\n\n1. CDN स्क्रिप्ट टॅग बदला:\n   ```html\n   \u003C!-- Before -->\n   \u003Cscript src=\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002F@microsoft\u002Fai-chat-protocol@...\u002Fdist\u002Fiife\u002Findex.js\">\u003C\u002Fscript>\n   \u003C!-- After -->\n   \u003Cscript src=\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Fndjson-readablestream@1.0.7\u002Fdist\u002Fndjson-readablestream.umd.js\">\u003C\u002Fscript>\n   ```\n2. `AIChatProtocolClient` ची इंस्टेंशिएशन (`new ChatProtocol.AIChatProtocolClient(\"\u002Fchat\")`) काढा.\n3. `client.getStreamedCompletion(messages)` ची जागा थेट `fetch()` कॉलने बॅकेंड स्ट्रीमिंग एंडपॉइंटला द्या.\n4. `for await (const response of result)` च्या जागी `for await (const chunk of readNDJSONStream(response.body))` वापरा.\n5. प्रॉपर्टी प्रवेश `response.delta.content` \u002F `response.error` कडून `chunk.delta.content` \u002F `chunk.error` कडे बदला.\n\n---\n\n## उद्दिष्टे\n\n- Azure OpenAI विरुद्ध Chat Completions किंवा जुने Completions वापरणाऱ्या सर्व Python कॉल साइट्सची गणना करा.\n- Python कोडबेससाठी स्थलांतर योजना आणि अनुक्रमण प्रस्तावित करा.\n- Responses API कडे सुरक्षित, लहान बदलाव करा.\n- कॉलर्सना Responses आउटपुट स्कीमा वापरायला अपडेट करा; मागील सुसंगततेचे व्रॅपर वापरू नका.\n- चाचण्या\u002Fलिंट्स चालवा; स्थलांतरामुळे उद्भवलेल्या लहान ब्रेक सुधारित करा.\n- लहान, पुनरावलोकनयोग्य बदल संच तयार करा आणि डीफ्ससह अंतिम सारांश द्या (कमिट करू नका).\n\n---\n\n## संरक्षण नियम\n\n- फक्त Git कार्यक्षेत्रातील फाइल्समध्ये बदल करा. कधीही बाहेर लिहू नका.\n- मागील सुसंगतता शिम्स ठेवल्या पाहिजेत नाहीत; कोड नवीन API स्वरूपात स्थलांतरित करा.\n- टॉम्बस्टोन\u002Fट्रांझिशन टिप्पण्या वा बॅकअप फाइल्स सोडू नका.\n- जर आधी स्ट्रीमिंग वापरले गेले असेल तर ते जपणूक करा; नाहीतर नॉन-स्ट्रीमिंग वापरा.\n- परवानगी मोडमध्ये असाल तर कमांड किंवा नेटवर्क कॉल्स चालवण्यापूर्वी मान्यता घ्या.\n- `git add`\u002F`git commit`\u002F`git push` चालवू नका; फक्त कार्यरत ट्री संपादने तयार करा.\n\n---\n\n## पाऊल 0: Azure OpenAI क्लायंट स्थलांतर (आधीच गरजेचे)\n\nजर कोडबेस `AzureOpenAI` किंवा `AsyncAzureOpenAI` कन्स्ट्रक्टर्स वापरत असेल तर आधीच ते मानक `OpenAI` \u002F `AsyncOpenAI` कन्स्ट्रक्टर्सकडे स्थलांतर करा. Azure-विशिष्ट कन्स्ट्रक्टर्स `openai>=1.108.1` मध्ये डिप्रिकेटेड आहेत.\n\n### का v1 API मार्ग?\n\nनवीन `\u002Fopenai\u002Fv1` एंडपॉइंट `AzureOpenAI()` च्या ऐवजी मानक `OpenAI()` क्लायंट वापरतो, `api_version` पॅरामीटरची आवश्यकता नाही, आणि OpenAI व Azure OpenAI दोन्हीवर समान कार्य करतो. त्याच क्लायंट कोडमुळे भविष्यातील आवृत्ती व्यवस्थापन आवश्यक नाही.\n\n### मुख्य बदल\n\n| पूर्वी | नंतर |\n|--------|-------|\n| `AzureOpenAI` | `OpenAI` |\n| `AsyncAzureOpenAI` | `AsyncOpenAI` |\n| `azure_endpoint` | `base_url` |\n| `azure_ad_token_provider` | `api_key` |\n| `api_version=...` | पूर्णपणे काढा |\n\n### स्वच्छता तपासणी यादी\n\n- क्लायंट तयार करताना `api_version` आर्ग्युमेंट काढा.\n- `.env`, अ‍ॅप सेटिंग्ज, Bicep\u002Fइन्फ्रा फाइल्समधून `AZURE_OPENAI_VERSION` \u002F `AZURE_OPENAI_API_VERSION` एन्व्ह वेरिएबल काढा.\n- `.env`, अ‍ॅप सेटिंग्ज, Bicep\u002Fइन्फ्रा आणि चाचणी फिक्स्चरमध्ये `AZURE_OPENAI_CLIENT_ID` चे नाव बदलून `AZURE_CLIENT_ID` करा (मानक Azure Identity SDK कन्व्हेन्शन).\n- `requirements.txt` किंवा `pyproject.toml` मध्ये `openai>=1.108.1` सुनिश्चित करा.\n\n### वातावरण वेरिएबल स्थलांतर\n\n| जुने एन्व्ह वेरिएबल | कृती | टीपा |\n|-------------|--------|-------|\n| `AZURE_OPENAI_VERSION` | **काढा** | v1 एंडपॉइंटसह `api_version` आवश्यक नाही |\n| `AZURE_OPENAI_API_VERSION` | **काढा** | वरच्याचप्रमाणे |\n| `AZURE_OPENAI_CLIENT_ID` | **नाव बदला** → `AZURE_CLIENT_ID` | `ManagedIdentityCredential(client_id=...)` साठी मानक Azure Identity SDK कन्व्हेन्शन |\n| `AZURE_OPENAI_ENDPOINT` | **ठेवा** | `base_url` तयार करण्यासाठी आवश्यक आहे |\n| `AZURE_OPENAI_CHAT_DEPLOYMENT` | **ठेवा** | `responses.create` मध्ये `model` पॅरामीटर म्हणून वापरले जाते |\n| `AZURE_OPENAI_API_KEY` | **ठेवा** | की-आधारित प्रमाणीकरणासाठी `api_key` म्हणून वापरले जाते |\n\nक्लायंट सेटअप कोड उदाहरणांसाठी (सिंक, अ‍ॅसिंक, EntraID, API की, मल्टी-टेनंट), पहा [cheat-sheet.md](.\u002Freferences\u002Fcheat-sheet.md).\n\n---\n\n## पाऊल 1: जुने कॉल साइट शोधा\n\nस्थलांतर आवश्यक असलेल्या सर्व कॉल साइट्स शोधण्यासाठी [detect_legacy.py](..\u002F..\u002F..\u002F..\u002F..\u002F.agents\u002Fskills\u002Fazure-openai-to-responses\u002Fscripts\u002Fdetect_legacy.py) स्क्रिप्ट चालवा:\n\n```bash\npython skills\u002Fazure-openai-to-responses\u002Fscripts\u002Fdetect_legacy.py .\n```\n\nकिंवा हे शोध स्वतः करा — प्रत्येक जुळणारा स्थलांतराचा उद्देश आहे:\n\n```bash\n# लेगसी API कॉल्स (पुन्हा लिहावे लागेल)\nrg \"chat\\.completions\\.create\"\nrg \"ChatCompletion\\.create\"\nrg \"Completion\\.create\"\n\n# बंद केलेले Azure क्लायंट कंस्ट्रक्टर्स (बदला करावा लागेल)\nrg \"AzureOpenAI\\(\"\nrg \"AsyncAzureOpenAI\\(\"\n\n# प्रतिसादाचे स्वरूप उपलब्धीचे नमुने (अपडेट करणे आवश्यक आहे)\nrg \"choices\\[0\\]\\.message\\.content\"\nrg \"choices\\[0\\]\\.delta\\.content\"\nrg \"choices\\[0\\]\\.message\\.function_call\"\nrg \"choices\\[0\\]\\.message\\.tool_calls\"\n\n# जुना नेस्टेड फॉर्मॅटमधील टूल डिफिनिशन्स (सोप्या स्वरूपात मदत करा)\nrg '\"function\":\\s*{\\s*\"name\"'\nrg \"pydantic_function_tool\"\n\n# जुना फॉर्मॅटमधील टूल निकाल (function_call_output मध्ये रूपांतर करावे)\nrg '\"role\":\\s*\"tool\"'\nrg '\"tool_call_id\"'\n\n# बंद केलेले पॅरामीटर्स (काढून टाकावे किंवा नाव बदलावे)\nrg \"response_format\"\nrg \"max_tokens\\b\"        # max_output_tokens असे नाव द्या\nrg \"['\\\"]seed['\\\"]\"      # remove entirely\n\n# बंद केलेले env व्हेरिएबल्स (साफसफाई करा)\nrg \"AZURE_OPENAI_API_VERSION|AZURE_OPENAI_VERSION\"\nrg \"AZURE_OPENAI_CLIENT_ID\"  # AZURE_CLIENT_ID असावे\n\n# GitHub मॉडेल्स एंडपॉइंट्स (काढून टाका — Responses APIला समर्थित नाही)\nrg \"models\\.github\\.ai|models\\.inference\\.ai\\.azure\"\n\n# फ्रेमवर्क-स्तरीय लेगसी नमुने (अपडेट करणे आवश्यक आहे)\nrg \"OpenAIChatCompletionClient\"  # MAF 1.0.0+: OpenAIChatClient ने बदला करा\nrg \"ChatOpenAI\\(\" | grep -v \"use_responses_api\"  # LangChain: use_responses_api=True आवश्यक आहे\n\n# चाचणी पायाभूत सुविधा (अपडेट करणे आवश्यक आहे)\nrg \"ChatCompletionChunk|AsyncCompletions\\.create\" tests\u002F\nrg \"_azure_ad_token_provider\" tests\u002F\nrg \"prompt_filter_results|content_filter_results\" tests\u002F\nrg \"choices\\[0\\]\" tests\u002F\n\n# कंटेंट फिल्टर त्रुटी बॉडी ऍक्सेस (अपडेट करा — रचना बदलली आहे)\nrg 'innererror.*content_filter_result|error\\.body\\[\"innererror\"\\]'\nrg \"content_filter_result\\[\" # जुना एकवचनी स्वरूप — आता content_filter_results (बहुवचनी) content_filters ऍरेमध्ये आहे\n\n# Chat Completions एंडपॉइंटसाठी रॉ HTTP कॉल्स (URL अपडेट करा)\nrg \"\u002Fopenai\u002Fdeployments\u002F.*\u002Fchat\u002Fcompletions\"\nrg \"api-version=\"\n```\n\n### नियम (ओळखा आणि पुन्हा लिहा)\n\n- **Chat Completions क्लायंट**: `client.chat.completions.create` → `client.responses.create(...)`.\n\n- **Azure क्लायंट कन्स्ट्रक्टर**: `AzureOpenAI(...)` → `OpenAI(base_url=..., api_key=...)`.\n- **टूल्स**: फंक्शन-कॉलिंग टूल डिफिनिशन्सचे नेस्टेड फॉरमॅट (`{\"type\": \"function\", \"function\": {\"name\": ...}}`) मधून फ्लॅट Responses फॉरमॅट (`{\"type\": \"function\", \"name\": ...}`) येथे कन्व्हर्ट करा; `tool_choice` वापरा; टूल निकाल परत करा `{\"type\": \"function_call_output\", \"call_id\": ..., \"output\": ...}` आयटम्स (नाहीतर `{\"role\": \"tool\", ...}`).\n- **टूल राऊंड-ट्रिप्स**: जेव्हा मॉडेल फंक्शन कॉल परत करते, तेव्हा `response.output` आयटम संभाषणात जोडा (मॅन्युअल `{\"role\": \"assistant\", \"tool_calls\": [...]}` डिक्ट नाही), नंतर प्रत्येकी निकालासाठी `function_call_output` आयटम जोडा.\n- **फ्यु-शॉट टूल उदा.**: जर संभाषणामध्ये हार्डकोडेड टूल कॉल उदाहरणे असतील, तर त्यांना `{\"type\": \"function_call\", \"id\": \"fc_...\", \"call_id\": \"fc_...\", ...}` + `{\"type\": \"function_call_output\", ...}` आयटम्समध्ये रूपांतरित करा. IDs नेहमी `fc_` वर सुरू होणे आवश्यक आहे.\n- **`pydantic_function_tool()`**: हा हेल्पर अजूनही जुना नेस्टेड फॉरमॅट तयार करतो आणि `responses.create()` सोबत **सुसंगत नाही**. मॅन्युअल टूल डिफिनिशन्स किंवा फ्लॅटिंग wrapper वापरून बदल करा.\n- **मल्टी-टर्न**: अॅपमध्ये संभाषण इतिहास सांगा; मागील टर्न `input` आयटम्सद्वारे पास करा.\n- **फॉरमॅटिंग**: Chat च्या टॉप-लेव्हल `response_format` चा वापर टाळा, Responses मध्ये `text.format` वापरा. कॅनॉनिकल स्वरूप: `text={\"format\": {\"type\": \"json_schema\", \"name\": \"Output\", \"strict\": True, \"schema\": {...}}}`.\n- **कंटेंट आयटम्स**: Chat मध्ये `content[].type: \"text\"` बदला Responses मध्ये `content[].type: \"input_text\"` असे, वापरकर्ता\u002Fसिस्टम टर्नसाठी.\n- **इमेज कंटेंट आयटम्स**: Chat मध्ये `content[].type: \"image_url\"` च्या जागी Responses मध्ये `content[].type: \"input_image\"` वापरा. `image_url` फील्ड एक नेस्टेड ऑब्जेक्ट `{\"url\": \"...\"}` मधून फ्लॅट स्ट्रिंगमध्ये बदलेल. पूर्व आणि नंतरच्या उदाहरणांसाठी चीट शीट बघा.\n- **रिजनिंग प्रयत्न**: **फक्त तेव्हाच `reasoning` माईग्रेट करा जे मूळ कोडमध्ये आधीपासून आहे**.\n- **कंटेंट फिल्टर त्रुटी हँडलिंग**: त्रुटीचा बॉडी स्ट्रक्चर बदलला आहे. Chat Completions मध्ये `error.body[\"innererror\"][\"content_filter_result\"]` (एकवचन); Responses API मध्ये `error.body[\"content_filters\"][0][\"content_filter_results\"]` (बहुवचन, अर्रेमध्ये). ज्या कोडने `innererror` ला ऍक्सेस केले आहे तो `KeyError` देते. नवीन पथ वापरा.\n- **रॉ HTTP कॉल्स**: जर अॅप थेट Azure OpenAI REST API कॉल करत असेल (`requests`, `httpx` इत्यादीद्वारे) `\u002Fopenai\u002Fdeployments\u002F{name}\u002Fchat\u002Fcompletions?api-version=...`, तर ते `\u002Fopenai\u002Fv1\u002Fresponses` मध्ये पुनर्लेखन करा. रिक्वेस्ट बॉडी बदलते: `messages` → `input`, `max_output_tokens` जोडा आणि `store: false`, `api-version` क्वेरी पॅराम काढा. रिस्पॉन्स बॉडी बदलते: `choices[0].message.content` → `output[0].content[0].text` (टीप: `output_text` हे SDK चं एक सोयीचे प्रॉपर्टी असून ते थेट REST JSON मध्ये नसतं).\n\n---\n\n## स्टेप 2: माईग्रेशन लागू करा\n\n### माईग्रेशन नोट्स (Chat Completions → Responses)\n\n- **माईग्रेट का करायचे**: Responses हा टेक्स्ट, टूल्स आणि स्ट्रीमिंगसाठी एकत्रित API आहे; Chat Completions जुनाट आहे. GPT-5 सह Responses सर्वोत्तम कामगिरीसाठी आवश्यक आहे.\n- **HTTP**: Azure एंडपॉईंट `\u002Fopenai\u002Fdeployments\u002F{name}\u002Fchat\u002Fcompletions` वरून `\u002Fopenai\u002Fv1\u002Fresponses` मध्ये बदलतो.\n- **फील्डस्**: `messages` → `input`, `max_tokens` → `max_output_tokens`. `temperature` जसेचे तसे राहते.\n- **फॉरमॅटिंग**: `response_format` → `text.format` (योग्य ऑब्जेक्टसह).\n- **कंटेंट आयटम्स**: System\u002FUser टर्नसाठी Chat मध्ये `content[].type: \"text\"` बदला Responses मध्ये `content[].type: \"input_text\"`.\n- **इमेज कंटेंट आयटम्स**: Chat मध्ये `content[].type: \"image_url\"` बदला Responses मध्ये `content[].type: \"input_image\"`. `image_url` फील्ड `{\"image_url\": {\"url\": \"...\"}}` पासून `{\"image_url\": \"...\"}` (साधा स्ट्रिंग — HTTPS URL किंवा `data:image\u002F...;base64,...` डेटा URI) मध्ये बदला.\n\n### पॅरामीटर मॅपिंग संदर्भ\n\n| Chat Completions | Responses API |\n|-----------------|---------------|\n| `prompt` | `input` |\n| `messages` | `input` (आयटम्सची अ‍ॅरे) |\n| `max_tokens` | `max_output_tokens` |\n| `response_format` | `text.format` (ऑब्जेक्ट) |\n| `temperature` | `temperature` (बदलेले नाही) |\n| `stop` | `stop` (बदलेले नाही) |\n| `frequency_penalty` | `frequency_penalty` (बदलेले नाही) |\n| `presence_penalty` | `presence_penalty` (बदलेले नाही) |\n| `tools` \u002F function-calling | `tools` (बदलेले नाही) |\n| `seed` | **काढून टाका** (सपोर्टेड नाही) |\n| `store` | `store` (सेट करा `false`) |\n| `content[].type: \"text\"` | `content[].type: \"input_text\"` |\n| `content[].type: \"image_url\"` | `content[].type: \"input_image\"` |\n| `\"image_url\": {\"url\": \"...\"}` | `\"image_url\": \"...\"` (फ्लॅट स्ट्रिंग) |\n\nपूर्णपूर्व आणि नंतरच्या कोड उदाहरणांसाठी [cheat-sheet.md](.\u002Freferences\u002Fcheat-sheet.md) पहा.\n\nटेस्ट इन्फ्रास्ट्रक्चर माईग्रेशनसाठी (मॉक्स, स्नॅपशॉट्स, अ‍ॅसर्शन) [test-migration.md](.\u002Freferences\u002Ftest-migration.md) पहा.\n\nत्रुटी निराकरण आणि लेक्शीन्ससाठी [troubleshooting.md](.\u002Freferences\u002Ftroubleshooting.md) पहा.\n\n---\n\n## डेटा रिटेन्शन आणि स्थिती\n\n- सर्व Responses विनंत्यांवर `store: false` सेट करा.\n- मागील मेसेज ID किंवा सर्व्हर-संग्रहीत संदर्भावर अवलंबून राहू नका; स्थिती क्लायंट-व्यवस्थापित ठेवा आणि मेटाडेटा कमी करा.\n\n---\n\n## स्वीकार्यता निकष\n\n### कोड-स्तरीय गेट्स (सर्व पास व्हावेत)\n\n- [ ] `rg \"chat\\.completions\\.create|ChatCompletion\\.create|Completion\\.create\"` साठी माईग्रेट केलेल्या फाइल्समध्ये जुळणारे कोणतेही नसेल.\n- [ ] `rg \"AzureOpenAI\\(|AsyncAzureOpenAI\\(\"` साठी शून्य मॅचेस — सर्व कन्स्ट्रक्टर `OpenAI`\u002F`AsyncOpenAI` वापरतात v1 एंडपॉईंटसह.\n- [ ] `rg \"models\\.github\\.ai|models\\.inference\\.ai\\.azure\"` साठी शून्य मॅचेस — GitHub Models कोड काढलेले.\n- [ ] `rg \"OpenAIChatCompletionClient\"` साठी शून्य मॅचेस — MAF 1.0.0+ कोड `OpenAIChatClient` वापरतो (जो Responses API वापरतो). प्री-1.0.0 मध्ये `agent-framework-openai>=1.0.0` मध्ये अपग्रेड करा.\n- [ ] सर्व `ChatOpenAI(...)` कॉल्स मध्ये `use_responses_api=True` आहे.\n- [ ] `rg \"choices\\[0\\]\"` साठी शून्य मॅचेस — सर्व प्रतिसादासाठी ऍक्सेस `resp.output_text` किंवा Responses आउटपुट स्कीमा वापरते.\n- [ ] टॉप लेव्हलवर `response_format` नाही; सर्व स्ट्रक्चर्ड आउटपुट `text={\"format\": {...}}` वापरतो.\n- [ ] `openai>=1.108.1` आणि `azure-identity` `requirements.txt` किंवा `pyproject.toml` मध्ये; dependency पुन्हा इन्स्टॉल केलेली.\n- [ ] प्रत्येक `responses.create` कॉलवर `store=False` सेट केलेले.\n- [ ] क्लायंट कन्स्ट्रक्शनमध्ये `api_version` नाही; `AZURE_OPENAI_API_VERSION` एन्व्ह फाइल्स आणि इन्फ्रातून काढले आहे.\n\n### टेस्ट इन्फ्रास्ट्रक्चर गेट्स (सर्व पास व्हावेत)\n\n- [ ] `rg \"ChatCompletionChunk|AsyncCompletions\\.create|chat\\.completions\" tests\u002F` साठी शून्य मॅचेस.\n- [ ] `rg \"_azure_ad_token_provider\" tests\u002F` साठी शून्य मॅचेस — अ‍ॅसर्शन अपडेट केलेले आहेत `isinstance(client, AsyncOpenAI)` किंवा `base_url` तपासण्यासाठी.\n- [ ] `rg \"prompt_filter_results|content_filter_results\" tests\u002F` साठी शून्य मॅचेस — Azure-विशिष्ट फिल्टर मॉक्स काढलेले.\n- [ ] मॉक फिक्स्चर्स `kwargs.get(\"input\")` वापरतात, `kwargs.get(\"messages\")` नाही.\n- [ ] स्नॅपशॉट \u002F गोल्डन फाइल्स Responses स्ट्रीमिंग स्वरूपात अपडेट केल्या (कोणतीही `choices[0]`, `function_call`, `logprobs` नाहीत).\n- [ ] सर्व टेस्ट अपडेट्सनंतर `pytest` शून्य यश-अपयशांसह पास झाला.\n\n### वर्तणुकीचे निकष (मॅन्युअली किंवा टेस्ट हर्नेसद्वारे तपासा)\n\n- [ ] **मूलभूत पूर्णता**: नॉन-स्ट्रीमिंग `responses.create` रिक्त नसलेले `output_text` परत करते.\n- [ ] **स्ट्रीम समता**: मूळ कोडने स्ट्रीमिंग वापरले असल्यास, माईग्रेटेड कोड स्ट्रीम करतो आणि रिक्त नसलेल्या `response.output_text.delta` इव्हेंट्स यील्ड करतो.\n- [ ] **स्ट्रक्चर्ड आउटपुट**: `text.format` वापरता `json_schema` सह, `json.loads(resp.output_text)` यशस्वी होते आणि स्कीमाशी जुळते.\n- [ ] **टूल-कॉल लूप**: टूल्स वापरले असतील तर मॉडेल टूल कॉल्स करते, अॅप त्यांना अंमलात आणतो, आणि नंतरच्या विनंतीमध्ये अंतिम `output_text` परत येतो (अमर्यादित लूप नाही).\n- [ ] **असिंक्रोनस समता**: जर `AsyncAzureOpenAI` वापरले असेल, तर `AsyncOpenAI` समतुल्य `await` सह काम करते.\n- [ ] **त्रुटी दर**: माईग्रेशनपूर्वीच्या तुलनेत कोणतीही नवीन 400\u002F401\u002F404 त्रुटी नाहीत.\n\n### देयके\n\n- संपादित फाइल्सचा सारांश, पूर्व\u002Fनंतर लेगसी कॉल साइट्सची गणना, पुढील पावले.\n- बदल कार्यप्रवाहातील संपादने आहेत (कोणतेही कमिट नाहीत).\n\n---\n\n## SDK आवृत्ती आवश्यकता\n\n| पॅकेज | किमान आवृत्ती |\n|---------|----------------|\n| `openai` | `>=1.108.1` |\n| `azure-identity` | लेटेस्ट (EntraID ऑथसाठी) |\n\n---\n\n## संदर्भ\n\n- [चीट शीट — सर्व कोड स्निपेट्स](.\u002Freferences\u002Fcheat-sheet.md)\n- [टेस्ट माईग्रेशन — मॉक, स्नॅपशॉट्स, अ‍ॅसर्शन](.\u002Freferences\u002Ftest-migration.md)\n- [त्रुटी निराकरण — त्रुटी, धोका तालिका, अडचणी](.\u002Freferences\u002Ftroubleshooting.md)\n- [detect_legacy.py — स्वयंचलित स्कॅनर](..\u002F..\u002F..\u002F..\u002F..\u002F.agents\u002Fskills\u002Fazure-openai-to-responses\u002Fscripts\u002Fdetect_legacy.py)\n- [Azure OpenAI स्टार्टर किट](https:\u002F\u002Faka.ms\u002Fopenai\u002Fstart)\n- [Azure OpenAI Responses API डॉक्स](https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fai-foundry\u002Fopenai\u002Fhow-to\u002Fresponses)\n- [Azure OpenAI API आवृत्ती जीवनचक्र](https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fai-foundry\u002Fopenai\u002Fapi-version-lifecycle?view=foundry-classic&tabs=python#api-evolution)\n- [OpenAI Responses API संदर्भ](https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fapi-reference\u002Fresponses)\n\n---\n\n\u003C!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**अस्वीकरण**:\nहा दस्तऐवज AI भाषांतर सेवा [Co-op Translator](https:\u002F\u002Fgithub.com\u002FAzure\u002Fco-op-translator) चा वापर करून अनुवादित केला आहे. जरी आम्ही अचूकतेसाठी प्रयत्न करतो, तरी कृपया लक्षात घ्या की स्वयंचलित भाषांतरांमध्ये त्रुटी किंवा अचूकतेची कमतरता असू शकते. मूळ दस्तऐवज त्याच्या मूळ भाषेत अधिकृत स्रोत मानला पाहिजे. महत्त्वाची माहिती असल्यास, व्यावसायिक मानवी भाषांतराची शिफारस केली जाते. या भाषांतराच्या वापरामुळे उद्भवणाऱ्या कोणत्याही गैरसमज किंवा चुकीच्या अर्थलावणीसाठी आम्ही जबाबदार नाही.\n\u003C!-- CO-OP TRANSLATOR DISCLAIMER END -->",{"name":5,"license":14},"main","f09e94ffe170f8af6d3db7c42987bbe4db227723","translations\u002Fmr\u002F.agents\u002Fskills\u002Fazure-openai-to-responses",26043,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fai-agents-for-beginners","https:\u002F\u002Faka.ms\u002Fai-agents-beginners","https:\u002F\u002Fgithub.com\u002Fmicrosoft","https:\u002F\u002Fopensource.microsoft.com","Open source projects and samples from Microsoft","2026-11-07 12:51:12",{"source":7,"skillName":5,"commands":35,"prompt":45,"zipAvailable":46},[36,39,42],{"tool":37,"command":38},"npx","npx skills add microsoft\u002Fai-agents-for-beginners --skill azure-openai-to-responses",{"tool":40,"command":41},"bunx","bunx skills add microsoft\u002Fai-agents-for-beginners --skill azure-openai-to-responses",{"tool":43,"command":44},"pnpm","pnpm dlx skills add microsoft\u002Fai-agents-for-beginners --skill azure-openai-to-responses","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fai-agents-for-beginners\u002Fblob\u002Fmain\u002Ftranslations\u002Fmr\u002F.agents\u002Fskills\u002Fazure-openai-to-responses\u002FSKILL.md",true,[48,54,58],{"path":49,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":52,"sourceHtmlUrl":53},"references\u002Fcheat-sheet.md","REFERENCE","参考文档",38729,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fai-agents-for-beginners\u002Fblob\u002Fmain\u002Ftranslations\u002Fmr\u002F.agents\u002Fskills\u002Fazure-openai-to-responses\u002Freferences\u002Fcheat-sheet.md",{"path":55,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":56,"sourceHtmlUrl":57},"references\u002Ftest-migration.md",10480,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fai-agents-for-beginners\u002Fblob\u002Fmain\u002Ftranslations\u002Fmr\u002F.agents\u002Fskills\u002Fazure-openai-to-responses\u002Freferences\u002Ftest-migration.md",{"path":59,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":60,"sourceHtmlUrl":61},"references\u002Ftroubleshooting.md",26956,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fai-agents-for-beginners\u002Fblob\u002Fmain\u002Ftranslations\u002Fmr\u002F.agents\u002Fskills\u002Fazure-openai-to-responses\u002Freferences\u002Ftroubleshooting.md",[63,81,92,100,108,115],{"skillNo":64,"name":65,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":66,"categories":67,"keywords":78,"publishedAt":19},"01M69A206TRZ8KK0CW0HYJF5V5","testing-course-samples","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fai-agents-for-beginners\u002Fblob\u002Fmain\u002Ftranslations\u002Fzh-TW\u002F.agents\u002Fskills\u002Ftesting-course-samples\u002FSKILL.md",[68,73],{"categoryNo":69,"categoryName":70,"taxonomyType":71,"taxonomyTypeDesc":72},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":74,"categoryName":75,"taxonomyType":76,"taxonomyTypeDesc":77},"01JBSEEDCAT000000000000039","教师与教育","PROFESSION","适用职业",[79,80],"testing","testing course samples",{"skillNo":82,"name":83,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":84,"categories":85,"keywords":89,"publishedAt":19},"01M69A1XRB2SFHYRMEH0K08EKZ","microsoft-docs","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fai-agents-for-beginners\u002Fblob\u002Fmain\u002Ftranslations\u002Fzh-TW\u002F.agents\u002Fskills\u002Fmicrosoft-docs\u002FSKILL.md",[86],{"categoryNo":87,"categoryName":88,"taxonomyType":71,"taxonomyTypeDesc":72},"01JBSEEDCAT000000000000023","Skill与智能体开发",[90,8,91],"docs","microsoft docs",{"skillNo":93,"name":94,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":95,"categories":96,"keywords":97,"publishedAt":19},"01M69A1VPZFJQ1HNGTZQ5P3WSC","local-ai-agents","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fai-agents-for-beginners\u002Fblob\u002Fmain\u002Ftranslations\u002Fzh-TW\u002F.agents\u002Fskills\u002Flocal-ai-agents\u002FSKILL.md",[],[98,99],"ai agents","local ai agents",{"skillNo":101,"name":102,"nameZh":6,"description":103,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":104,"categories":105,"keywords":106,"publishedAt":19},"01M69A1S947N7MM6V9JF85S2E7","jupyter-notebook","當使用者要求建立、搭建或編輯 Jupyter 筆記本（`.ipynb`）用於實驗、探索或教學時使用；優先使用隨附範本並執行輔助腳本 `new_notebook.py` 來產生一個乾淨的起始筆記本。","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fai-agents-for-beginners\u002Fblob\u002Fmain\u002Ftranslations\u002Fzh-TW\u002F.agents\u002Fskills\u002Fjupyter-notebook\u002FSKILL.md",[],[107],"jupyter notebook",{"skillNo":109,"name":110,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":111,"categories":112,"keywords":113,"publishedAt":19},"01M69A1Q8EXPWKZSQK69V6WF22","deploying-scalable-agents","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fai-agents-for-beginners\u002Fblob\u002Fmain\u002Ftranslations\u002Fzh-TW\u002F.agents\u002Fskills\u002Fdeploying-scalable-agents\u002FSKILL.md",[],[114],"deploying scalable agents",{"skillNo":116,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":119,"publishedAt":19},"01M69A1MHZTH3RH9N8VYSYG74X","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fai-agents-for-beginners\u002Fblob\u002Fmain\u002Ftranslations\u002Fzh-TW\u002F.agents\u002Fskills\u002Fazure-openai-to-responses\u002FSKILL.md",[],[18]]