[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M699NMRW1VGME0W93BWX85R3":3,"skill-same:01M699NMRW1VGME0W93BWX85R3":72},{"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},"01M699NMRW1VGME0W93BWX85R3","azure-openai-to-responses",null,"microsoft\u002Fai-agents-for-beginners","microsoft","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6154722?v=4","01M698VYDXZ6JW5WH3CRV650R8","Microsoft","01M6998ZK2275KMJE6Y5SEA2X2",79423,"MIT","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fai-agents-for-beginners\u002Fblob\u002Fmain\u002Ftranslations\u002Fmy\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# Python အက်ပ်များကို Azure OpenAI Chat Completions မှ Responses API သို့ ပြောင်းရွှေ့ခြင်း\n\n> **အတည်ပြုလမ်းညွှန်ချက် — တိကျမှန်ကန်စွာလိုက်နာပါ**\n>\n> ဤကျွမ်းကျင်မှုသည် Python ကုဒ်ဘေ့စ်များကို Azure OpenAI Chat Completions မှ\n> တည်ဆောက်ထားပြီး Responses API ကိုပြောင်းရွှေ့ခြင်းဖြစ်သည်။ ဤညွှန်ကြားချက်များကို တိကျမှန်ကန်စွာလိုက်နာပါ။\n> မတော်တဆ parameter mapping များလုပ်ခြင်းသို့မဟုတ် API ပုံစံအသစ်များတီထွင်ခြင်း မပြုပါနှင့်။\n\n---\n\n## စတင်လုပ်ဆောင်ရန်အချက်များ\n\nအသုံးပြုသူသည် အောက်ပါအချက်များကို လုပ်ဆောင်လိုသောအခါ ဤကျွမ်းကျင်မှုကို စတင်ပါ။\n- Python အက်ပ်ကို Azure OpenAI Chat Completions မှ Responses API သို့ ပြောင်းရွှေ့ရန်\n- Python OpenAI SDK အသုံးပြုမှုကို Azure OpenAI အတွက် နောက်ဆုံး API ပုံစံသို့ တိုးမြှင့်ရန်\n- Responses များအတွက် ပြင်ဆင်ထားရန် GPT-5 သို့မဟုတ်ပိုမိုသစ်သော မော်ဒယ်များအတွက် Python ကုဒ်ပြင်ဆင်ရန်\n- `AzureOpenAI`\u002F`AsyncAzureOpenAI` မှ ပြောင်းလဲ၍ `OpenAI`\u002F`AsyncOpenAI` စံနမူနာ client ကို v1 endpoint နှင့်အသုံးပြုရန်\n- `AzureOpenAI` constructor များသို့မဟုတ် `api_version` သက်ဆိုင်သော ဖျက်သိမ်းခြင်း သတိပေးချက်များကို ပြင်ဆင်ရန်\n\n---\n\n## ⚠️ မော်ဒယ်သင့်တော်မှု — စစ်ဆေးပါ\n\n> **ပြောင်းရွှေ့ခြင်းမပြုမီ၊ သင့် Azure OpenAI deployment သည် Responses API ကို ပံ့ပိုးထားမထားစစ်ဆေးပါ။**\n\n### ၁။ သင့် deployment ကို Smoke-test ဆောင်ရွက်ခြင်း (အမြန်ဆုံး)\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` ၏အနည်းဆုံးတန်ဖိုးမှာ **၁၆** ဖြစ်သည်။ ၁၆ ထက်နည်းပါက 400 error ပြန်ထုတ်ပါလိမ့်မယ်။ Smoke-test အတွက် ၅၀+ ကိုအသုံးပြုပါ။\n\nဤကိစ္စသည် 404 ပြန်လည်ရရှိပါက၊ ထို deployment ၏ မော်ဒယ်သည် Responses ကိုမပံ့ပိုးသေးပါ — အောက်ပါ ကိုးကားချက်ကိုစစ်ဆေးပါ သို့မဟုတ် ပံ့ပိုးသော မော်ဒယ်ဖြင့် ပြန်လည် deploy ပြုလုပ်ပါ။\n\n### ၂။ သင့်ဒေသရှိ လွှမ်းမိုးသော မော်ဒယ်များကို စစ်ဆေးခြင်း (အကြံပြု)\n\nသင့်ဒေသတွင် Responses API ပံ့ပိုးမှုရှိသည့် မော်ဒယ်များအား ကြည့်ရှုရန် မော်ဒယ်သင့်တော်မှု ကိရိယာကို အသုံးပြုပါ။\n\n```bash\npython migrate.py models --subscription YOUR_SUB_ID --location YOUR_REGION\n```\n\nဤသည်သည် Azure ARM ကို တိုက်ရိုက်မေးမြန်းကာ မော်ဒယ်များက Responses, စနစ်တကျထွက်ရှိမှု၊ ကိရိယာများကဲ့သို့ ပံ့ပိုးမှုရှိ\u002Fမရှိ၊ စသည်တို့ကို ပြမြောက်သည်။ `--filter gpt-5.1,gpt-5.2` ဖြင့် ရလဒ်ကို ကန့်သတ်နိုင်ပြီး `--json` ဖြင့် စီမံရေးသားနိုင်သည်။\n\n### ၃။ မော်ဒယ်ပံ့ပိုးမှု အပြည့်အစုံ ကိုးကားချက်\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` parameter**: ထိုမော်ဒယ်များအတွက် မပံ့ပိုးပါ။ အရင်ကကုဒ်တွင် ရှိခဲ့လျှင်သာ ပြောင်းရွှေ့ပါ။\n> - **`seed` parameter**: Responses API တွင် မပံ့ပိုးပါ — အားလုံးမှ ဖယ်ရှားပစ်ပါ။\n> - **`text.format` မှ စနစ်တကျ ထွက်ရှိမှု**: ဝေးကျော်သုံး မော်ဒယ်များတွင် `strict: true` JSON စံသတ်မှတ်ချက်များ မတိကျစွာ အကောင်အထည်ဖော်နိုင်ပါ။\n> - **ကိရိယာ စီမံခန့်ခွဲမှု**: GPT-5+ သည် ချဉ်းကပ်မှုအတွင်း ကိရိယာခေါ်ဆိုမှုများ ကို ပြုလုပ်သည်။ ဝေးကျော်သုံး မော်ဒယ်များတွင် အလွှာထပ်ခွဲခြင်းမရှိပေ။\n> - **အပူချိန် ကန့်သတ်ချက်များ**: `gpt-5` သို့ ပြောင်းရာတွင် temperature ကို ဖယ်ရှားရန် သို့မဟုတ် `1` သတ်မှတ်ရမည်။ ဝေးကျော်သုံး မော်ဒယ်များတွင် ကန့်သတ်ချက် မရှိပါ။\n\n### O-series reasoning မော်ဒယ်များ (o1, o3-mini, o3, o4-mini)\n\nO-series မော်ဒယ်များတွင် parameter ကန့်သတ်ချက် ထူးခြားသည်။ ဤမော်ဒယ်များသို့ ပစ်မှတ်ထားသော အက်ပ်များ ပြောင်းရွှေ့သည့်အခါ -\n\n- **`temperature`**: `1` ဖြစ်ရမည် (သို့မဟုတ် ဖယ်ရှားထားရမည်)။ အခြားတန်ဖိုး မလက်ခံပါ။\n- **`max_completion_tokens` → `max_output_tokens`**: Azure အထူး `max_completion_tokens`  အသုံးပြုသော အက်ပ်များသည် `max_output_tokens` သို့ ပြောင်းရန်။ လက်လှမ်းမီသည့် တန်ဖိုးများ (4096+) သတ်မှတ်ပါ၊ reasoning tokens သည် ကန့်သတ်ချက်ထဲ တက်ရှိသည်။\n- **`reasoning_effort`**: အက်ပ်မှ `reasoning_effort` (နည်း\u002Fအလယ်\u002Fမြင့်) အသုံးပြုလျှင် ထိန်းသိမ်းပါ၊ Responses API သည် o-series မော်ဒယ်များအတွက် အထောက်အပံ့ပေးပါသည်။\n- **စတီးမင်း့ ဖွင့်လှစ်ခြင်း**: O-series မော်ဒယ်များသည် reasoning ပြီးဆုံးမှ text delta events များ ထုတ်လွှင့်နိုင်ရန် output ကို buffer ထားသည်။ စတီးမင်း့င်သည် ထုံးစံအတိုင်း လုပ်ဆောင်နိုင်သော်လည်း ပထမအကြိမ် `response.output_text.delta` သည် GPT မော်ဒယ်များထက် နာရီကြာစောင့်ရနိုင်ပါသည်။\n- **`top_p`**: O-series တွင် မပံ့ပိုးပါ — ရှိပါက ဖယ်ရှားပါ။\n- **ကိရိယာအသုံးပြုမှု**: O-series မော်ဒယ်များသည် Responses API မှတဆင့် GPT မော်ဒယ်များလို ကိရိယာများကို ပံ့ပိုးသည်၊ သို့သော် ကိရိယာ ခေါ်ဆိုမှု စီမံခန့်ခွဲမှု အရည်အသွေး မရွေးပါ။\n\n**လှုပ်ရှားမှု — မော်ဒယ် အကြံပြုချက် အသိပေးမှု**: စကင်အဆင့်တွင် အက်ပ်သည် မည်သည့် မော်ဒယ်ကို ပစ်မှတ်ထားသည်ကို (deployment အမည်များ၊ env vars၊ config) စစ်ဆေးပါ။ မော်ဒယ်သည် `gpt-4.1` မမီပါက (gpt-4.1+ မဟုတ်ပါ) အသုံးပြုသူအား အောက်ပါအချက်များ ပြောကြားပေးပါ -\n- အဆိုပါပြောင်းရွှေ့ခြင်းသည် ပထမဦးဆုံး စာသား၊ စကားပြော၊ စတီးမင်း့င် နှင့် ကိရိယာများ အတွက် လုပ်ဆောင်နိုင်ပါလိမ့်မယ်။\n- နောက်ဆုံးမော်ဒယ်များ (`gpt-5.1`, `gpt-5.2`) သည် ကိရိယာ စီမံခန့်ခွဲမှုပိုမိုကောင်းမွန်မှု၊ စနစ်တကျ output enforcement, reasoning နှင့် ဒေသပေါ်မူတည်သောရရှိနိုင်မှု ပိုမိုကောင်းတယ်။\n- သင့်အနေနဲ့ deployment ကို ပြင်ဆင်ပြီးသာ မြှင့်တင်စဉ်းစားသင့်သည် — ပြောင်းရွှေ့ခြင်းကို အတားအဆီးမဖြစ်ပါ။\n\nမော်ဒယ် ဗားရှင်းအပေါ် မူတည်၍ ပြောင်းရွှေ့မှုကို တားမြစ်ခြင်း သို့မဟုတ် ငြင်းဆန်ခြင်း မပြုပါနှင့်။ အကြံပြုချက်ဖြစ်သည်။\n\n### GitHub Models သည် Responses API ကို မပံ့ပိုးပါ\n\n> **GitHub Models (`models.github.ai`, `models.inference.ai.azure.com`) သည် Responses API ကို မပံ့ပိုးပါ။**\n\nကုဒ်ဘေ့စ်တွင် GitHub Models ၏ ကုဒ်လမ်းကြောင်းရှိလျှင် ( `base_url` ကို `models.github.ai` သို့မဟုတ် `models.inference.ai.azure.com` သို့ညွှန်ပြသည်ဟု ရှာပါ)၊ **ပြောင်းရွှေ့မှုအတွက် အလုံးစုံ ဖယ်ရှားပစ်ပါ**။ Responses API သည် Azure OpenAI, OpenAI သို့မဟုတ် Ollama ကဲ့သို့ Responses ပံ့ပိုးသော ကိုက်ညီသော ဒေသတွင်း endpoint ကိုသာ လိုအပ်သည်။\n\nစကင်အချိန်၌ လုပ်ဆောင်ရန် -\n- GitHub Models ၏ ကုဒ်လမ်းကြောင်းများကို ဖယ်ရှားရန် မှတ်သားပါ။\n\n---\n\n## ဖရိမ်ဝွတ်ပြောင်းရွှေ့ခြင်း\n\nအများအပြားသော အက်ပ်များသည် OpenAI ပေါ်တွင် အဆင့်မြင့် ဖရိမ်ဝွတ်များ အသုံးပြုကြသည်။ ဤမျိုးကို ပြောင်းရွှေ့သည့်အခါ ဖရိမ်ဝွတ်၏ ကိုယ်ပိုင် API ပြောင်းလဲမှုများ၊ အောက်ခံ OpenAI ခေါ်ဆိုမှုများသာမကပါ။\n\n### Microsoft Agent Framework (MAF)\n\n**ပထမဆုံး သင့် MAF ဗားရှင်းကို စစ်ဆေးပါ** — ပြောင်းရွှေ့မှုသည် သင်၏ MAF 1.0.0+ သို့မဟုတ် pre-1.0.0 beta\u002Frc ပေါ် မူတည်သည်။\n\n#### MAF 1.0.0+ (agent-framework-openai >= 1.0.0)\n\n`OpenAIChatClient` သည် **ရေ့ပုံ Responses API ကို အသုံးပြုနေပြီး** — ပြောင်းရွှေ့ရန် မလိုပါ။ legacy `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 pre-1.0.0 (beta\u002Frc ထုတ်လုပ်ချက်များ)\n\npre-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` ကို ထည့်ပါ။ ပြီးတော့ response ၏ `.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အပြည့်အစုံ မျှဝေမှုများအတွက် [cheat-sheet.md](.\u002Freferences\u002Fcheat-sheet.md) ကို ကြည့်ရှုနိုင်ပါသည်။\n\n---\n\n## Frontend ပြောင်းရွှေ့ခြင်း လမ်းညွှန်ချက်\n\n> **Responses API သည် server-side ဆိုင်ရာဖြစ်သည်။** သင်၏ Python backend ကိုပြောင်းရွှေ့ပါ; frontend ၏ HTTP သဘောတူညီချက်သည် မပြောင်းလဲသင့်ပါ (backend သည် thin pass-through ဖြစ်လျှင်သာ) — ဤအခြေအနေ၌ Responses request ပုံစံကို လက်ခံရန် ထည့်စဉ်းစားပါ။ Frontend က client-side အချက်အလက်ဖြင့် OpenAI ကိုတိုက်ရိုက်ခေါ်လျှင်၊ ဒီခေါ်ဆိုမှုများကို မူလ backend သို့ငြိမ့်ရွှေ့ပါ။\n\n### `@microsoft\u002Fai-chat-protocol` ဖျက်သိမ်းခြင်း\n\n`@microsoft\u002Fai-chat-protocol` npm package ကို အသုံးမပြုတော့ဘဲ [`ndjson-readablestream`](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fndjson-readablestream) ဖြင့် အစားထိုးသင့်သည်။ Frontend တွင် စတင်တွေ့ပါက -\n\n၁။ CDN script tag ကို အစားထိုးပါ:\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   ```\n၂။ `AIChatProtocolClient` instantiation ကို ဖယ်ရှားပါ (`new ChatProtocol.AIChatProtocolClient(\"\u002Fchat\")`)။\n၃။ `client.getStreamedCompletion(messages)` ကို fetch() ကိုနောက်ခံ streaming endpoint သို့ တိုက်ရိုက်ခေါ်ဆိုပါ။\n၄။ `for await (const response of result)` ကို `for await (const chunk of readNDJSONStream(response.body))` ဖြင့် ပြောင်းပါ။\n၅။ `response.delta.content` \u002F `response.error` မှ `chunk.delta.content` \u002F `chunk.error` သို့ property access ပြောင်းပါ။\n\n---\n\n## ရည်ရွယ်ချက်များ\n\n- Azure OpenAI အတွက် Chat Completions သို့မဟုတ် legacy Completions ကို အသုံးပြုနေသော Python ခေါ်ဆိုမှုပိုင်းအားလုံး စာရင်းပြုစုပါ။\n- Python ကုဒ်ဘေ့စ်အတွက် ပြောင်းရွှေ့ခြင်းအစီအစဉ်နှင့် စဉ်လိုက် အချိန်ဇယားကို သတ်မှတ်ပါ။\n- Responses API သို့ လုံခြုံပြီး အနည်းဆုံး ပြောင်းလဲမှုများ လုပ်ဆောင်ပါ။\n- Responses ထွက်ရှိမှု schema ကို အသုံးပြုရန် ခေါ်ဆိုသူများကို တိုးတက်သိသာစေပါ; အကျိုးသက်ရောက်မှုအတွက် wrappers မလိုအပ်ပါ။\n- စမ်းသပ်မှုများ\u002F lint များ ပြုလုပ်ပြီး ပြောင်းလဲမှုကြောင့် ဖြစ်ပေါ်သော သိသာခြင်းမရှိသေးသော ပြဿနာများ ဖြေရှင်းပါ။\n- သေးငယ်၍ သုံးသပ်နိုင်သော ပြောင်းလဲမှုစုစည်းမှုများ ပြုစုပြီး နောက်ဆုံးအကျဉ်းချုပ်အဖြစ် diff များနှင့် ပေးပို့ပါ (commit မလုပ်ပါနှင့်)။\n\n---\n\n## ကာကွယ်စောင့်ကြည့်မှု\n\n- git workspace အတွင်းရှိ ဖိုင်များသာ ပြင်ဆင်ပါ။ အပြင်ဘက်ကို မရေးသားပါနှင့်။\n- အနောက်မှ အားနည်းမှုသိုလှောင်ထားခြင်းများ တစ်စုံတစ်ရာ ထိန်းသိမ်းထားခြင်းမပြုပါ။ ကုဒ်ကို API ပုံစံအသစ်သို့ ပြောင်းရွှေ့ပါ။\n- သားမွေးတင်တိုက်ရှာမှု မက်ဆေ့ခ်ျ\u002F အကူအညီ စာများ သို့မဟုတ် အထောက်အထားဖိုင်များ မထားပါနှင့်။\n- ယခင်တွင် streaming ကို အသုံးပြုခဲ့လျှင် ထိန်းသိမ်းပါ; မဟုတ်ပါက non-streaming ကို အသုံးပြုပါ။\n- မှတ်ချက်မိန့်ခွန်း (approval mode) တွင် အမိန့်များ သို့မဟုတ် ကွန်ယက်ခေါ်ဆိုမှုများ လုပ်မည့်အခါ အတည်ပြုချက် မေးပါ။\n- `git add`\u002F`git commit`\u002F`git push` မလုပ်ပါနှင့်; working-tree ပြင်ဆင်ခြင်းများသာ ဖန်တီးပါ။\n\n---\n\n## အဆင့် ၀: Azure OpenAI Client ပြောင်းရွှေ့ခြင်း (လိုအပ်ချက်)\n\nကုဒ်ဘေ့စ်တွင် `AzureOpenAI` သို့မဟုတ် `AsyncAzureOpenAI` constructor များကို အသုံးပြုထားပါက စုစုပေါင်း `OpenAI` \u002F `AsyncOpenAI` constructor များသို့ ယခင်ဆုံး ပြောင်းရွှေ့ပါ။ Azure အထူး constructor များသည် `openai>=1.108.1` တွင် ဖျက်သိမ်းထားသည်။\n\n### v1 API လမ်းကြောင်း ဘာကြောင့်?\n\nအသစ် `\u002Fopenai\u002Fv1` endpoint သည် `AzureOpenAI()` မှ မဟုတ်ဘဲ `OpenAI()` client စံနမူနာကို သုံးသည်၊ `api_version` parameter မလိုအပ်၊ OpenAI နှင့် Azure OpenAI တို့တွင် ထပ်တူတူ လုပ်ဆောင်သည်။ client ကုဒ်တစ်ခုဖြင့် အနာဂတ်ကိုကြိုတင်ကာကွယ်ထားသည် — ဗားရှင်း စီမံခန့်ခွဲမှု မလိုအပ်ပါ။\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- client constructor မှ `api_version` argument ကို ဖယ်ရှားပါ။\n- `.env`, app setting များနှင့် Bicep\u002Finfra ဖိုင်များမှ `AZURE_OPENAI_VERSION` \u002F `AZURE_OPENAI_API_VERSION` environment variables များကို ဖယ်ရှားပါ။\n- `.env`, app setting များနှင့် Bicep\u002Finfra ၊ test fixture များတွင် `AZURE_OPENAI_CLIENT_ID` ကို `AZURE_CLIENT_ID` ဟု ပြောင်းပါ (Azure Identity SDK ရိုးရာစည်းမျဉ်း)။\n- `requirements.txt` သို့မဟုတ် `pyproject.toml` တွင် `openai>=1.108.1` ဖြစ်ကြောင်း သေချာပါစေ။\n\n### environment variable ပြောင်းရွှေ့မှု\n\n| အဟောင်း env var | လုပ်ဆောင်မှု | မှတ်ချက်များ |\n|-------------|--------|-------|\n| `AZURE_OPENAI_VERSION` | **ဖယ်ရှားပါ** | v1 endpoint တွင် `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` parameter အဖြစ် အသုံးပြုသည် |\n| `AZURE_OPENAI_API_KEY` | **ထိန်းသိမ်းပါ** | key-based authentication အတွက် `api_key` အဖြစ် အသုံးပြုသည် |\n\nclient setup ကုဒ် နမူနာများ (sync, async, EntraID, API key, multi-tenant) အတွက် [cheat-sheet.md](.\u002Freferences\u002Fcheat-sheet.md) ကိုကြည့်ပါ။\n\n---\n\n## အဆင့် ၁: Legacy ခေါ်ဆိုမှုများ ရှာဖွေခြင်း\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 client constructor များ (အစားထိုးရန်လိုအပ်သည်)\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# ရှေးခေတ် περιβάλλον μεταβλητές များ (သန့်ရှင်းရေးလုပ်ရန်)\nrg \"AZURE_OPENAI_API_VERSION|AZURE_OPENAI_VERSION\"\nrg \"AZURE_OPENAI_CLIENT_ID\"  # AZURE_CLIENT_ID ဖြစ်သင့်သည်\n\n# GitHub Models endpoint များ (ဖယ်ရှားရန် — Responses API မထောက်ပံ့)\nrg \"models\\.github\\.ai|models\\.inference\\.ai\\.azure\"\n\n# Framework- အဆင့် ရှေးရိုးစနစ်များ (နောက်ဆုံးပေါ် ပြင်ဆင်ရန်လိုအပ်သည်)\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 array အတွင်းရှိသည်\n\n# Chat Completions endpoint တွင် သဘာဝ HTTP ကော်လ်များ (URL ကိုနောက်ဆုံးပေါ် ပြင်ဆင်ရန်လိုအပ်သည်)\nrg \"\u002Fopenai\u002Fdeployments\u002F.*\u002Fchat\u002Fcompletions\"\nrg \"api-version=\"\n```\n\n### လမ်းညွှန်ချက်များ (သိရှိ၊ ပြန်ရေးခြင်း)\n\n- **Chat Completions client**: `client.chat.completions.create` → `client.responses.create(...)`။\n\n- **Azure client constructors**: `AzureOpenAI(...)` → `OpenAI(base_url=..., api_key=...)`။\n- **Tools**: function-calling tool သတ်မှတ်ချက်များကို nested ဖော်စပ်မှုမှ (`{\"type\": \"function\", \"function\": {\"name\": ...}}`) flat Responses ဖော်မတ်သို့ (`{\"type\": \"function\", \"name\": ...}`) ပြောင်းပြင်ပါ။ `tool_choice` ကို အသုံးပြုပါ။ tool ရလဒ်များကို `{\"type\": \"function_call_output\", \"call_id\": ..., \"output\": ...}` အမျိုးအစား (မဟုတ်သော `{\"role\": \"tool\", ...}`) အဖြစ် ပြန်ပေးပါ။\n- **Tool round-trips**: model သည် function calls ပြန်လည်ပေးသည့်အခါ `response.output` items များကို စကားပြောပွဲတွင် ထည့်သွင်းပါ (manual `{\"role\": \"assistant\", \"tool_calls\": [...]}` dict မဟုတ်)။ ထို့နောက် ရလဒ်တစ်ခုချင်းစီအတွက် `function_call_output` items များ ထည့်သွင်းပါ။\n- **Few-shot tool examples**: စကားပြောပွဲတွင် hardcoded tool call နမူနာများပါဝင်လျှင်၊ `{\"type\": \"function_call\", \"id\": \"fc_...\", \"call_id\": \"fc_...\", ...}` + `{\"type\": \"function_call_output\", ...}` items များသို့ ပြောင်းပါ။ IDs များသည် `fc_` ဖြင့် စတင်ရမည်။\n- **`pydantic_function_tool()`**: ဤ helper သည် ဆက်လက်ပင် အဟောင်း nested ဖော်စပ်မှုကို ထုတ်လုပ်ပြီး `responses.create()` နှင့် **မကိုက်ညီပါ**။ manual tool သတ်မှတ်ချက်များ သို့မဟုတ် flattening wrapper ဖြင့် အစားထိုးပါ။\n- **Multi-turn**: စကားပြောဖော်ပြမှုမှတ်တမ်းကို app တွင် ထိန်းသိမ်းထားပါ။ ယခင် လှည့်များကို `input` items ဖြင့် ပေးပို့ပါ။\n- **Formatting**: Chat ၏ top-level `response_format` ကို Responses တွင် `text.format` ဖြင့် အစားထိုးပါ။ canonical ဖော်စပ်ချက်မှာ `text={\"format\": {\"type\": \"json_schema\", \"name\": \"Output\", \"strict\": True, \"schema\": {...}}}` ဖြစ်သည်။\n- **Content items**: Chat ၏ `content[].type: \"text\"` ကို Responses ၏ `content[].type: \"input_text\"` သို့ အစားထိုးပါ။ အသုံးပြုသူ\u002Fစနစ် လှည့်များအတွက်ဖြစ်သည်။\n- **Image content items**: Chat ၏ `content[].type: \"image_url\"` ကို Responses ၏ `content[].type: \"input_image\"` သို့ အစားထိုးပါ။ `image_url` ကွင်းကို nested object `{\"url\": \"...\"}` မှ flat string သို့ ပြောင်းလဲသည်။ cheat sheet တွင် အရင်\u002Fနောက် နမူနာများကို ကြည့်ပါ။\n- **Reasoning effort**: **ကုဒ်တွင် မပြင်ဆင်မီ၊ `reasoning` ရှိမှသာ လှည့်ပြောင်းပါ။**\n- **Content filter error handling**: error body ဖွဲ့စည်းမှု ပြောင်းလဲသည်။ Chat Completions သည် `error.body[\"innererror\"][\"content_filter_result\"]`(singular) ကို သုံးပြီး Responses API သည် `error.body[\"content_filters\"][0][\"content_filter_results\"]`(plural, array ထဲ) ကို သုံးသည်။ `innererror` သို့ 접근ရာ၌ `KeyError` တက်မည်။ အသစ်သောလမ်းကြောင်းကို ပြန်ရေးပါ။\n- **Raw HTTP calls**: app သည် Azure OpenAI REST API ကိုတိုက်ရိုက် သုံးသည်ဆိုပါက (`requests`, `httpx` စသည်ဖြင့်) `\u002Fopenai\u002Fdeployments\u002F{name}\u002Fchat\u002Fcompletions?api-version=...` မှ `\u002Fopenai\u002Fv1\u002Fresponses` သို့ ပြောင်းပါ။ requests body မှ `messages` → `input` ပြောင်းပြီး `max_output_tokens`, `store: false` ထည့်ပါ၊ `api-version` query param ကို ဖယ်ရှားပါ။ response body မှ `choices[0].message.content` → `output[0].content[0].text` (မှတ်ချက်- `output_text` သည် SDK မှ အဆင်ပြေမှုအတွက် မူလ raw REST JSON တွင် မပါဝင်ပါ) ဖြစ်သည်။\n\n---\n\n## အဆင့် ၂: လှည့်ပြောင်းမှု အကောင်အထည်ဖော်ခြင်း\n\n### လှည့်ပြောင်းမှု မှတ်ချက်များ (Chat Completions → Responses)\n\n- **လှည့်ပြောင်းရခြင်း အကြောင်း**: Responses သည် စာသား၊ tools နှင့် streaming အတွက် ဆက်စပ် API ဖြစ်ပြီး Chat Completions သည် အရင်က API ဖြစ်သည်။ GPT-5 အသုံးပြုမှုတွင် Responses API ကို ဦးစားပေးသုံးရန်လိုအပ်သည်။\n- **HTTP**: Azure endpoint ကို `\u002Fopenai\u002Fdeployments\u002F{name}\u002Fchat\u002Fcompletions` မှ `\u002Fopenai\u002Fv1\u002Fresponses` သို့ ပြောင်းသည်။\n- **Field များ**: `messages` → `input`, `max_tokens` → `max_output_tokens`။ `temperature` ပြောင်းရွှေ့မှု မရှိ။\n- **Formatting**: `response_format` → `text.format` (object ဖြင့်) ဖြစ်သည်။\n- **Content items**: Chat ၏ `content[].type: \"text\"` ကို Responses ၏ `content[].type: \"input_text\"` သို့ အစားထိုးပါ။ စနစ်\u002Fအသုံးပြုသူ လှည့်များများအတွက် ဖြစ်သည်။\n- **Image content items**: Chat ၏ `content[].type: \"image_url\"` ကို Responses ၏ `content[].type: \"input_image\"` သို့ အစားထိုးပါ။ `image_url` ကွင်းသည် `{\"image_url\": {\"url\": \"...\"}}` မှ `{\"image_url\": \"...\"}` (စက်ကွင်း မဖြစ်သော string - HTTPS URL သို့မဟုတ် `data:image\u002F...;base64,...` data URI) သို့ ပြောင်းလဲသည်။\n\n### ပါရာမီတာ အသေးစိတ် တွဲဖက်ညွှန်ကြားချက်\n\n| Chat Completions | Responses API |\n|-----------------|---------------|\n| `prompt` | `input` |\n| `messages` | `input` (items များ Array ဖြစ်သည်) |\n| `max_tokens` | `max_output_tokens` |\n| `response_format` | `text.format` (object) |\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\": \"...\"` (flat string) |\n\nအပြည့်အစုံနမူနာများအတွက် [cheat-sheet.md](.\u002Freferences\u002Fcheat-sheet.md) ကို ကြည့်ပါ။\n\nစမ်းသပ်မှု တည်ဆောက်ရေး လှည့်ပြောင်းမှု (mocks, snapshots, assertions) များအတွက် [test-migration.md](.\u002Freferences\u002Ftest-migration.md) ကို ကြည့်ပါ။\n\nအမှားများနှင့် လုပ်ဆောင်ရာ၌ ဖြစ်ပေါ်နိုင်စရာပြဿနာများအတွက် [troubleshooting.md](.\u002Freferences\u002Ftroubleshooting.md) ကို ကြည့်ပါ။\n\n---\n\n## ဒေတာ သိမ်းဆည်းမှုနှင့် အခြေအနေ\n\n- Responses ၏ တောင်းဆိုမှုအားလုံးတွင် `store: false` ကို သတ်မှတ်ပါ။\n- ယခင် message ID များ သို့မဟုတ် server များတွင် သိမ်းဆည်းထားသော context များကို မူတည်စေမည် မဟုတ်ပါ။ စနစ်အခြေအနေကို client မှ ထိန်းသိမ်းပါ၊ metadata ကိုလည်း အနည်းငယ်သာ အသုံးပြုပါ။\n\n---\n\n## လက်ခံမည့် စံချိန်နှုန်းများ\n\n### ကုဒ်အဆင့် ကြီးကြပ်မှု (အားလုံး ဖြတ်သန်းရမည်)\n\n- [ ] `rg \"chat\\.completions\\.create|ChatCompletion\\.create|Completion\\.create\"` မရှိပါ။\n- [ ] `rg \"AzureOpenAI\\(|AsyncAzureOpenAI\\(\"` မရှိပါ — အားလုံး constructor များသည် `OpenAI`\u002F`AsyncOpenAI` နှင့် v1 endpoint အသုံးပြုထားသည်။\n- [ ] `rg \"models\\.github\\.ai|models\\.inference\\.ai\\.azure\"` မရှိပါ — GitHub Models ကုဒ်လမ်းကြောင်း ဖယ်ရှားထားသည်။\n- [ ] `rg \"OpenAIChatCompletionClient\"` မရှိပါ — MAF 1.0.0+ ကုဒ်သည် `OpenAIChatClient` (Responses API သုံး) ကို အသုံးပြုသည်။ 1.0.0 မရောက်ခင် version တွင် `agent-framework-openai>=1.0.0` သို့ အဆင့်မြှင့်ထားပါ။\n- [ ] `ChatOpenAI(...)` အားလုံးတွင် `use_responses_api=True` ပါဝင်သည်။\n- [ ] `rg \"choices\\[0\\]\"` မရှိပါ — ရလဒ်များအားလုံးသည် `resp.output_text` သို့မဟုတ် Responses output schema အသုံးပြုသည်။\n- [ ] top level တွင် `response_format` မရှိရန်၊ အားလုံး structured output သည် `text={\"format\": {...}}` အသုံးပြုသည်။\n- [ ] `openai>=1.108.1` နှင့် `azure-identity` ကို `requirements.txt` သို့မဟုတ် `pyproject.toml` တွင် ပါဝင်ပြီး dependency များ ပြန်တပ်ဆင်ထားသည်။\n- [ ] `store=False` ကို `responses.create` အားလုံးတွင် သတ်မှတ်ထားသည်။\n- [ ] client constructor တွင် `api_version` မပါရှိ၊ `AZURE_OPENAI_API_VERSION` ကို env ဖိုင်များနှင့် အခြား အခြေအနေများမှ ဖယ်ရှားပြီးဖြစ်သည်။\n\n### စမ်းသပ်မှု တည်ဆောက်ရေး ကြီးကြပ်မှု (အားလုံး ဖြတ်သန်းရမည်)\n\n- [ ] `rg \"ChatCompletionChunk|AsyncCompletions\\.create|chat\\.completions\" tests\u002F` မရှိပါ။\n- [ ] `rg \"_azure_ad_token_provider\" tests\u002F` မရှိပါ — assertion များမှာ `isinstance(client, AsyncOpenAI)` သို့မဟုတ် `base_url` သဘောထား သပ်သပ်လျှောက်ထားပါ။\n- [ ] `rg \"prompt_filter_results|content_filter_results\" tests\u002F` မရှိပါ — Azure-specific filter mocks များ ဖယ်ရှားထားသည်။\n- [ ] mock fixtures များတွင် `kwargs.get(\"input\")` ကိုသာ အသုံးပြုသည်၊ `kwargs.get(\"messages\")` မဟုတ်ပါ။\n- [ ] snapshot \u002F golden ဖိုင်များ ကို Responses streaming schema (no `choices[0]`, `function_call`, `logprobs`, etc.) ဖြင့် ပြင်ဆင်ထားသည်။\n- [ ] `pytest` စမ်းသပ်မှု အောင်မြင်ပြီး ဘေးတွင် အမှားမရှိပါ။\n\n### အပြုအမူ ကြီးကြပ်မှု (ကိုယ်တိုင် သို့မဟုတ် စမ်းသပ်မှု ဖွင့်ရန်)\n\n- [ ] **အခြေခံ အကောင်အထည်ဖော်မှု**: non-streaming `responses.create` သည် ရလဒ် မအားလုံး မလွတ်ပါ။\n- [ ] **Stream parity**: မူလကုဒ်တွင် streaming အသုံးပြုထားလျှင်၊ လှည့်ပြောင်းပြီးကုဒ်သည် stream လုပ်ပြီး non-empty ကွဲပြားချက် delta များ ဖြန့်ဝေသည်။\n- [ ] **Structured output**: `text.format` နှင့် `json_schema` အသုံးပြုပြီး `json.loads(resp.output_text)` ဖြင့် အောင်မြင်စွာ ဖတ်ရှုနိုင်ပြီး schema နှင့် ကိုက်ညီသည်။\n- [ ] **Tool-call loop**: tools များကိုအသုံးပြုပြီး၊ model သည် tool calls ထုတ်ပြန်သည်၊ အက်ပ် သည် ထိုအချက်များကို ဆောင်ရွက်ပြီး နောက်တောင်းဆိုမှုတွင် နောက်ဆုံး `output_text` ကို ပြန်လည်ထုတ်ပေးသည် (ကာကွယ်မဲ့ infinite loop မရှိ)။\n- [ ] **Async parity**: `AsyncAzureOpenAI` ကိုအသုံးပြုပြီးလျှင် `AsyncOpenAI` နှင့် `await` ဖြင့် လုပ်ဆောင်နိုင်သည်။\n- [ ] **Error rate**: လှည့်ပြောင်းမပြုမီ baseline နှင့် နှိုင်းယှဉ်၍ 400\u002F401\u002F404 error များ မပြန်လည်တက်ပါ။\n\n### ပို့ဆောင်ရန် အရာများ\n\n- ပြင်ဆင်ခဲ့သည့် ဖိုင်များ၊ legacy call site များ၏ အရေအတွက် မတူညီမှု (အရင်\u002Fနောက်) နှင့် နောက်ဆုံးအဆင့်များကို အကျဉ်းချုပ်ပါ။\n- ပြောင်းလဲမှုများသည် working-tree edits အဖြစ်သာ (commit မလုပ်သေး) ဖြစ်သည်။\n\n---\n\n## SDK ဗားရှင်း လိုအပ်ချက်များ\n\n| package | အနည်းဆုံး ဗားရှင်း |\n|---------|----------------|\n| `openai` | `>=1.108.1` |\n| `azure-identity` | နောက်ဆုံးဗားရှင်း (EntraID auth အတွက်) |\n\n---\n\n## လမ်းညွှန်ချက်များ\n\n- [Cheat Sheet — အားလုံးသော ကုဒ်အပိုင်းများ](.\u002Freferences\u002Fcheat-sheet.md)\n- [Test Migration — mocks, snapshots, assertions](.\u002Freferences\u002Ftest-migration.md)\n- [Troubleshooting — မှားချက်များ, အန္တရာယ်ဇယား, ပေါ်တတ်သောပြဿနာများ](.\u002Freferences\u002Ftroubleshooting.md)\n- [detect_legacy.py — automated scanner](..\u002F..\u002F..\u002F..\u002F..\u002F.agents\u002Fskills\u002Fazure-openai-to-responses\u002Fscripts\u002Fdetect_legacy.py)\n- [Azure OpenAI Starter Kit](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 -->","# Python အက်ပ်များကို Azure OpenAI Chat Completions မှ Responses API သို့ ပြောင်းရွှေ့ခြင်း\n\n> **အတည်ပြုလမ်းညွှန်ချက် — တိကျမှန်ကန်စွာလိုက်နာပါ**\n>\n> ဤကျွမ်းကျင်မှုသည် Python ကုဒ်ဘေ့စ်များကို Azure OpenAI Chat Completions မှ\n> တည်ဆောက်ထားပြီး Responses API ကိုပြောင်းရွှေ့ခြင်းဖြစ်သည်။ ဤညွှန်ကြားချက်များကို တိကျမှန်ကန်စွာလိုက်နာပါ။\n> မတော်တဆ parameter mapping များလုပ်ခြင်းသို့မဟုတ် API ပုံစံအသစ်များတီထွင်ခြင်း မပြုပါနှင့်။\n\n---\n\n## စတင်လုပ်ဆောင်ရန်အချက်များ\n\nအသုံးပြုသူသည် အောက်ပါအချက်များကို လုပ်ဆောင်လိုသောအခါ ဤကျွမ်းကျင်မှုကို စတင်ပါ။\n- Python အက်ပ်ကို Azure OpenAI Chat Completions မှ Responses API သို့ ပြောင်းရွှေ့ရန်\n- Python OpenAI SDK အသုံးပြုမှုကို Azure OpenAI အတွက် နောက်ဆုံး API ပုံစံသို့ တိုးမြှင့်ရန်\n- Responses များအတွက် ပြင်ဆင်ထားရန် GPT-5 သို့မဟုတ်ပိုမိုသစ်သော မော်ဒယ်များအတွက် Python ကုဒ်ပြင်ဆင်ရန်\n- `AzureOpenAI`\u002F`AsyncAzureOpenAI` မှ ပြောင်းလဲ၍ `OpenAI`\u002F`AsyncOpenAI` စံနမူနာ client ကို v1 endpoint နှင့်အသုံးပြုရန်\n- `AzureOpenAI` constructor များသို့မဟုတ် `api_version` သက်ဆိုင်သော ဖျက်သိမ်းခြင်း သတိပေးချက်များကို ပြင်ဆင်ရန်\n\n---\n\n## ⚠️ မော်ဒယ်သင့်တော်မှု — စစ်ဆေးပါ\n\n> **ပြောင်းရွှေ့ခြင်းမပြုမီ၊ သင့် Azure OpenAI deployment သည် Responses API ကို ပံ့ပိုးထားမထားစစ်ဆေးပါ။**\n\n### ၁။ သင့် deployment ကို Smoke-test ဆောင်ရွက်ခြင်း (အမြန်ဆုံး)\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` ၏အနည်းဆုံးတန်ဖိုးမှာ **၁၆** ဖြစ်သည်။ ၁၆ ထက်နည်းပါက 400 error ပြန်ထုတ်ပါလိမ့်မယ်။ Smoke-test အတွက် ၅၀+ ကိုအသုံးပြုပါ။\n\nဤကိစ္စသည် 404 ပြန်လည်ရရှိပါက၊ ထို deployment ၏ မော်ဒယ်သည် Responses ကိုမပံ့ပိုးသေးပါ — အောက်ပါ ကိုးကားချက်ကိုစစ်ဆေးပါ သို့မဟုတ် ပံ့ပိုးသော မော်ဒယ်ဖြင့် ပြန်လည် deploy ပြုလုပ်ပါ။\n\n### ၂။ သင့်ဒေသရှိ လွှမ်းမိုးသော မော်ဒယ်များကို စစ်ဆေးခြင်း (အကြံပြု)\n\nသင့်ဒေသတွင် Responses API ပံ့ပိုးမှုရှိသည့် မော်ဒယ်များအား ကြည့်ရှုရန် မော်ဒယ်သင့်တော်မှု ကိရိယာကို အသုံးပြုပါ။\n\n```bash\npython migrate.py models --subscription YOUR_SUB_ID --location YOUR_REGION\n```\n\nဤသည်သည် Azure ARM ကို တိုက်ရိုက်မေးမြန်းကာ မော်ဒယ်များက Responses, စနစ်တကျထွက်ရှိမှု၊ ကိရိယာများကဲ့သို့ ပံ့ပိုးမှုရှိ\u002Fမရှိ၊ စသည်တို့ကို ပြမြောက်သည်။ `--filter gpt-5.1,gpt-5.2` ဖြင့် ရလဒ်ကို ကန့်သတ်နိုင်ပြီး `--json` ဖြင့် စီမံရေးသားနိုင်သည်။\n\n### ၃။ မော်ဒယ်ပံ့ပိုးမှု အပြည့်အစုံ ကိုးကားချက်\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` parameter**: ထိုမော်ဒယ်များအတွက် မပံ့ပိုးပါ။ အရင်ကကုဒ်တွင် ရှိခဲ့လျှင်သာ ပြောင်းရွှေ့ပါ။\n> - **`seed` parameter**: Responses API တွင် မပံ့ပိုးပါ — အားလုံးမှ ဖယ်ရှားပစ်ပါ။\n> - **`text.format` မှ စနစ်တကျ ထွက်ရှိမှု**: ဝေးကျော်သုံး မော်ဒယ်များတွင် `strict: true` JSON စံသတ်မှတ်ချက်များ မတိကျစွာ အကောင်အထည်ဖော်နိုင်ပါ။\n> - **ကိရိယာ စီမံခန့်ခွဲမှု**: GPT-5+ သည် ချဉ်းကပ်မှုအတွင်း ကိရိယာခေါ်ဆိုမှုများ ကို ပြုလုပ်သည်။ ဝေးကျော်သုံး မော်ဒယ်များတွင် အလွှာထပ်ခွဲခြင်းမရှိပေ။\n> - **အပူချိန် ကန့်သတ်ချက်များ**: `gpt-5` သို့ ပြောင်းရာတွင် temperature ကို ဖယ်ရှားရန် သို့မဟုတ် `1` သတ်မှတ်ရမည်။ ဝေးကျော်သုံး မော်ဒယ်များတွင် ကန့်သတ်ချက် မရှိပါ။\n\n### O-series reasoning မော်ဒယ်များ (o1, o3-mini, o3, o4-mini)\n\nO-series မော်ဒယ်များတွင် parameter ကန့်သတ်ချက် ထူးခြားသည်။ ဤမော်ဒယ်များသို့ ပစ်မှတ်ထားသော အက်ပ်များ ပြောင်းရွှေ့သည့်အခါ -\n\n- **`temperature`**: `1` ဖြစ်ရမည် (သို့မဟုတ် ဖယ်ရှားထားရမည်)။ အခြားတန်ဖိုး မလက်ခံပါ။\n- **`max_completion_tokens` → `max_output_tokens`**: Azure အထူး `max_completion_tokens`  အသုံးပြုသော အက်ပ်များသည် `max_output_tokens` သို့ ပြောင်းရန်။ လက်လှမ်းမီသည့် တန်ဖိုးများ (4096+) သတ်မှတ်ပါ၊ reasoning tokens သည် ကန့်သတ်ချက်ထဲ တက်ရှိသည်။\n- **`reasoning_effort`**: အက်ပ်မှ `reasoning_effort` (နည်း\u002Fအလယ်\u002Fမြင့်) အသုံးပြုလျှင် ထိန်းသိမ်းပါ၊ Responses API သည် o-series မော်ဒယ်များအတွက် အထောက်အပံ့ပေးပါသည်။\n- **စတီးမင်း့ ဖွင့်လှစ်ခြင်း**: O-series မော်ဒယ်များသည် reasoning ပြီးဆုံးမှ text delta events များ ထုတ်လွှင့်နိုင်ရန် output ကို buffer ထားသည်။ စတီးမင်း့င်သည် ထုံးစံအတိုင်း လုပ်ဆောင်နိုင်သော်လည်း ပထမအကြိမ် `response.output_text.delta` သည် GPT မော်ဒယ်များထက် နာရီကြာစောင့်ရနိုင်ပါသည်။\n- **`top_p`**: O-series တွင် မပံ့ပိုးပါ — ရှိပါက ဖယ်ရှားပါ။\n- **ကိရိယာအသုံးပြုမှု**: O-series မော်ဒယ်များသည် Responses API မှတဆင့် GPT မော်ဒယ်များလို ကိရိယာများကို ပံ့ပိုးသည်၊ သို့သော် ကိရိယာ ခေါ်ဆိုမှု စီမံခန့်ခွဲမှု အရည်အသွေး မရွေးပါ။\n\n**လှုပ်ရှားမှု — မော်ဒယ် အကြံပြုချက် အသိပေးမှု**: စကင်အဆင့်တွင် အက်ပ်သည် မည်သည့် မော်ဒယ်ကို ပစ်မှတ်ထားသည်ကို (deployment အမည်များ၊ env vars၊ config) စစ်ဆေးပါ။ မော်ဒယ်သည် `gpt-4.1` မမီပါက (gpt-4.1+ မဟုတ်ပါ) အသုံးပြုသူအား အောက်ပါအချက်များ ပြောကြားပေးပါ -\n- အဆိုပါပြောင်းရွှေ့ခြင်းသည် ပထမဦးဆုံး စာသား၊ စကားပြော၊ စတီးမင်း့င် နှင့် ကိရိယာများ အတွက် လုပ်ဆောင်နိုင်ပါလိမ့်မယ်။\n- နောက်ဆုံးမော်ဒယ်များ (`gpt-5.1`, `gpt-5.2`) သည် ကိရိယာ စီမံခန့်ခွဲမှုပိုမိုကောင်းမွန်မှု၊ စနစ်တကျ output enforcement, reasoning နှင့် ဒေသပေါ်မူတည်သောရရှိနိုင်မှု ပိုမိုကောင်းတယ်။\n- သင့်အနေနဲ့ deployment ကို ပြင်ဆင်ပြီးသာ မြှင့်တင်စဉ်းစားသင့်သည် — ပြောင်းရွှေ့ခြင်းကို အတားအဆီးမဖြစ်ပါ။\n\nမော်ဒယ် ဗားရှင်းအပေါ် မူတည်၍ ပြောင်းရွှေ့မှုကို တားမြစ်ခြင်း သို့မဟုတ် ငြင်းဆန်ခြင်း မပြုပါနှင့်။ အကြံပြုချက်ဖြစ်သည်။\n\n### GitHub Models သည် Responses API ကို မပံ့ပိုးပါ\n\n> **GitHub Models (`models.github.ai`, `models.inference.ai.azure.com`) သည် Responses API ကို မပံ့ပိုးပါ။**\n\nကုဒ်ဘေ့စ်တွင် GitHub Models ၏ ကုဒ်လမ်းကြောင်းရှိလျှင် ( `base_url` ကို `models.github.ai` သို့မဟုတ် `models.inference.ai.azure.com` သို့ညွှန်ပြသည်ဟု ရှာပါ)၊ **ပြောင်းရွှေ့မှုအတွက် အလုံးစုံ ဖယ်ရှားပစ်ပါ**။ Responses API သည် Azure OpenAI, OpenAI သို့မဟုတ် Ollama ကဲ့သို့ Responses ပံ့ပိုးသော ကိုက်ညီသော ဒေသတွင်း endpoint ကိုသာ လိုအပ်သည်။\n\nစကင်အချိန်၌ လုပ်ဆောင်ရန် -\n- GitHub Models ၏ ကုဒ်လမ်းကြောင်းများကို ဖယ်ရှားရန် မှတ်သားပါ။\n\n---\n\n## ဖရိမ်ဝွတ်ပြောင်းရွှေ့ခြင်း\n\nအများအပြားသော အက်ပ်များသည် OpenAI ပေါ်တွင် အဆင့်မြင့် ဖရိမ်ဝွတ်များ အသုံးပြုကြသည်။ ဤမျိုးကို ပြောင်းရွှေ့သည့်အခါ ဖရိမ်ဝွတ်၏ ကိုယ်ပိုင် API ပြောင်းလဲမှုများ၊ အောက်ခံ OpenAI ခေါ်ဆိုမှုများသာမကပါ။\n\n### Microsoft Agent Framework (MAF)\n\n**ပထမဆုံး သင့် MAF ဗားရှင်းကို စစ်ဆေးပါ** — ပြောင်းရွှေ့မှုသည် သင်၏ MAF 1.0.0+ သို့မဟုတ် pre-1.0.0 beta\u002Frc ပေါ် မူတည်သည်။\n\n#### MAF 1.0.0+ (agent-framework-openai >= 1.0.0)\n\n`OpenAIChatClient` သည် **ရေ့ပုံ Responses API ကို အသုံးပြုနေပြီး** — ပြောင်းရွှေ့ရန် မလိုပါ။ legacy `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 pre-1.0.0 (beta\u002Frc ထုတ်လုပ်ချက်များ)\n\npre-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` ကို ထည့်ပါ။ ပြီးတော့ response ၏ `.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အပြည့်အစုံ မျှဝေမှုများအတွက် [cheat-sheet.md](.\u002Freferences\u002Fcheat-sheet.md) ကို ကြည့်ရှုနိုင်ပါသည်။\n\n---\n\n## Frontend ပြောင်းရွှေ့ခြင်း လမ်းညွှန်ချက်\n\n> **Responses API သည် server-side ဆိုင်ရာဖြစ်သည်။** သင်၏ Python backend ကိုပြောင်းရွှေ့ပါ; frontend ၏ HTTP သဘောတူညီချက်သည် မပြောင်းလဲသင့်ပါ (backend သည် thin pass-through ဖြစ်လျှင်သာ) — ဤအခြေအနေ၌ Responses request ပုံစံကို လက်ခံရန် ထည့်စဉ်းစားပါ။ Frontend က client-side အချက်အလက်ဖြင့် OpenAI ကိုတိုက်ရိုက်ခေါ်လျှင်၊ ဒီခေါ်ဆိုမှုများကို မူလ backend သို့ငြိမ့်ရွှေ့ပါ။\n\n### `@microsoft\u002Fai-chat-protocol` ဖျက်သိမ်းခြင်း\n\n`@microsoft\u002Fai-chat-protocol` npm package ကို အသုံးမပြုတော့ဘဲ [`ndjson-readablestream`](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fndjson-readablestream) ဖြင့် အစားထိုးသင့်သည်။ Frontend တွင် စတင်တွေ့ပါက -\n\n၁။ CDN script tag ကို အစားထိုးပါ:\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   ```\n၂။ `AIChatProtocolClient` instantiation ကို ဖယ်ရှားပါ (`new ChatProtocol.AIChatProtocolClient(\"\u002Fchat\")`)။\n၃။ `client.getStreamedCompletion(messages)` ကို fetch() ကိုနောက်ခံ streaming endpoint သို့ တိုက်ရိုက်ခေါ်ဆိုပါ။\n၄။ `for await (const response of result)` ကို `for await (const chunk of readNDJSONStream(response.body))` ဖြင့် ပြောင်းပါ။\n၅။ `response.delta.content` \u002F `response.error` မှ `chunk.delta.content` \u002F `chunk.error` သို့ property access ပြောင်းပါ။\n\n---\n\n## ရည်ရွယ်ချက်များ\n\n- Azure OpenAI အတွက် Chat Completions သို့မဟုတ် legacy Completions ကို အသုံးပြုနေသော Python ခေါ်ဆိုမှုပိုင်းအားလုံး စာရင်းပြုစုပါ။\n- Python ကုဒ်ဘေ့စ်အတွက် ပြောင်းရွှေ့ခြင်းအစီအစဉ်နှင့် စဉ်လိုက် အချိန်ဇယားကို သတ်မှတ်ပါ။\n- Responses API သို့ လုံခြုံပြီး အနည်းဆုံး ပြောင်းလဲမှုများ လုပ်ဆောင်ပါ။\n- Responses ထွက်ရှိမှု schema ကို အသုံးပြုရန် ခေါ်ဆိုသူများကို တိုးတက်သိသာစေပါ; အကျိုးသက်ရောက်မှုအတွက် wrappers မလိုအပ်ပါ။\n- စမ်းသပ်မှုများ\u002F lint များ ပြုလုပ်ပြီး ပြောင်းလဲမှုကြောင့် ဖြစ်ပေါ်သော သိသာခြင်းမရှိသေးသော ပြဿနာများ ဖြေရှင်းပါ။\n- သေးငယ်၍ သုံးသပ်နိုင်သော ပြောင်းလဲမှုစုစည်းမှုများ ပြုစုပြီး နောက်ဆုံးအကျဉ်းချုပ်အဖြစ် diff များနှင့် ပေးပို့ပါ (commit မလုပ်ပါနှင့်)။\n\n---\n\n## ကာကွယ်စောင့်ကြည့်မှု\n\n- git workspace အတွင်းရှိ ဖိုင်များသာ ပြင်ဆင်ပါ။ အပြင်ဘက်ကို မရေးသားပါနှင့်။\n- အနောက်မှ အားနည်းမှုသိုလှောင်ထားခြင်းများ တစ်စုံတစ်ရာ ထိန်းသိမ်းထားခြင်းမပြုပါ။ ကုဒ်ကို API ပုံစံအသစ်သို့ ပြောင်းရွှေ့ပါ။\n- သားမွေးတင်တိုက်ရှာမှု မက်ဆေ့ခ်ျ\u002F အကူအညီ စာများ သို့မဟုတ် အထောက်အထားဖိုင်များ မထားပါနှင့်။\n- ယခင်တွင် streaming ကို အသုံးပြုခဲ့လျှင် ထိန်းသိမ်းပါ; မဟုတ်ပါက non-streaming ကို အသုံးပြုပါ။\n- မှတ်ချက်မိန့်ခွန်း (approval mode) တွင် အမိန့်များ သို့မဟုတ် ကွန်ယက်ခေါ်ဆိုမှုများ လုပ်မည့်အခါ အတည်ပြုချက် မေးပါ။\n- `git add`\u002F`git commit`\u002F`git push` မလုပ်ပါနှင့်; working-tree ပြင်ဆင်ခြင်းများသာ ဖန်တီးပါ။\n\n---\n\n## အဆင့် ၀: Azure OpenAI Client ပြောင်းရွှေ့ခြင်း (လိုအပ်ချက်)\n\nကုဒ်ဘေ့စ်တွင် `AzureOpenAI` သို့မဟုတ် `AsyncAzureOpenAI` constructor များကို အသုံးပြုထားပါက စုစုပေါင်း `OpenAI` \u002F `AsyncOpenAI` constructor များသို့ ယခင်ဆုံး ပြောင်းရွှေ့ပါ။ Azure အထူး constructor များသည် `openai>=1.108.1` တွင် ဖျက်သိမ်းထားသည်။\n\n### v1 API လမ်းကြောင်း ဘာကြောင့်?\n\nအသစ် `\u002Fopenai\u002Fv1` endpoint သည် `AzureOpenAI()` မှ မဟုတ်ဘဲ `OpenAI()` client စံနမူနာကို သုံးသည်၊ `api_version` parameter မလိုအပ်၊ OpenAI နှင့် Azure OpenAI တို့တွင် ထပ်တူတူ လုပ်ဆောင်သည်။ client ကုဒ်တစ်ခုဖြင့် အနာဂတ်ကိုကြိုတင်ကာကွယ်ထားသည် — ဗားရှင်း စီမံခန့်ခွဲမှု မလိုအပ်ပါ။\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- client constructor မှ `api_version` argument ကို ဖယ်ရှားပါ။\n- `.env`, app setting များနှင့် Bicep\u002Finfra ဖိုင်များမှ `AZURE_OPENAI_VERSION` \u002F `AZURE_OPENAI_API_VERSION` environment variables များကို ဖယ်ရှားပါ။\n- `.env`, app setting များနှင့် Bicep\u002Finfra ၊ test fixture များတွင် `AZURE_OPENAI_CLIENT_ID` ကို `AZURE_CLIENT_ID` ဟု ပြောင်းပါ (Azure Identity SDK ရိုးရာစည်းမျဉ်း)။\n- `requirements.txt` သို့မဟုတ် `pyproject.toml` တွင် `openai>=1.108.1` ဖြစ်ကြောင်း သေချာပါစေ။\n\n### environment variable ပြောင်းရွှေ့မှု\n\n| အဟောင်း env var | လုပ်ဆောင်မှု | မှတ်ချက်များ |\n|-------------|--------|-------|\n| `AZURE_OPENAI_VERSION` | **ဖယ်ရှားပါ** | v1 endpoint တွင် `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` parameter အဖြစ် အသုံးပြုသည် |\n| `AZURE_OPENAI_API_KEY` | **ထိန်းသိမ်းပါ** | key-based authentication အတွက် `api_key` အဖြစ် အသုံးပြုသည် |\n\nclient setup ကုဒ် နမူနာများ (sync, async, EntraID, API key, multi-tenant) အတွက် [cheat-sheet.md](.\u002Freferences\u002Fcheat-sheet.md) ကိုကြည့်ပါ။\n\n---\n\n## အဆင့် ၁: Legacy ခေါ်ဆိုမှုများ ရှာဖွေခြင်း\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 client constructor များ (အစားထိုးရန်လိုအပ်သည်)\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# ရှေးခေတ် περιβάλλον μεταβλητές များ (သန့်ရှင်းရေးလုပ်ရန်)\nrg \"AZURE_OPENAI_API_VERSION|AZURE_OPENAI_VERSION\"\nrg \"AZURE_OPENAI_CLIENT_ID\"  # AZURE_CLIENT_ID ဖြစ်သင့်သည်\n\n# GitHub Models endpoint များ (ဖယ်ရှားရန် — Responses API မထောက်ပံ့)\nrg \"models\\.github\\.ai|models\\.inference\\.ai\\.azure\"\n\n# Framework- အဆင့် ရှေးရိုးစနစ်များ (နောက်ဆုံးပေါ် ပြင်ဆင်ရန်လိုအပ်သည်)\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 array အတွင်းရှိသည်\n\n# Chat Completions endpoint တွင် သဘာဝ HTTP ကော်လ်များ (URL ကိုနောက်ဆုံးပေါ် ပြင်ဆင်ရန်လိုအပ်သည်)\nrg \"\u002Fopenai\u002Fdeployments\u002F.*\u002Fchat\u002Fcompletions\"\nrg \"api-version=\"\n```\n\n### လမ်းညွှန်ချက်များ (သိရှိ၊ ပြန်ရေးခြင်း)\n\n- **Chat Completions client**: `client.chat.completions.create` → `client.responses.create(...)`။\n\n- **Azure client constructors**: `AzureOpenAI(...)` → `OpenAI(base_url=..., api_key=...)`။\n- **Tools**: function-calling tool သတ်မှတ်ချက်များကို nested ဖော်စပ်မှုမှ (`{\"type\": \"function\", \"function\": {\"name\": ...}}`) flat Responses ဖော်မတ်သို့ (`{\"type\": \"function\", \"name\": ...}`) ပြောင်းပြင်ပါ။ `tool_choice` ကို အသုံးပြုပါ။ tool ရလဒ်များကို `{\"type\": \"function_call_output\", \"call_id\": ..., \"output\": ...}` အမျိုးအစား (မဟုတ်သော `{\"role\": \"tool\", ...}`) အဖြစ် ပြန်ပေးပါ။\n- **Tool round-trips**: model သည် function calls ပြန်လည်ပေးသည့်အခါ `response.output` items များကို စကားပြောပွဲတွင် ထည့်သွင်းပါ (manual `{\"role\": \"assistant\", \"tool_calls\": [...]}` dict မဟုတ်)။ ထို့နောက် ရလဒ်တစ်ခုချင်းစီအတွက် `function_call_output` items များ ထည့်သွင်းပါ။\n- **Few-shot tool examples**: စကားပြောပွဲတွင် hardcoded tool call နမူနာများပါဝင်လျှင်၊ `{\"type\": \"function_call\", \"id\": \"fc_...\", \"call_id\": \"fc_...\", ...}` + `{\"type\": \"function_call_output\", ...}` items များသို့ ပြောင်းပါ။ IDs များသည် `fc_` ဖြင့် စတင်ရမည်။\n- **`pydantic_function_tool()`**: ဤ helper သည် ဆက်လက်ပင် အဟောင်း nested ဖော်စပ်မှုကို ထုတ်လုပ်ပြီး `responses.create()` နှင့် **မကိုက်ညီပါ**။ manual tool သတ်မှတ်ချက်များ သို့မဟုတ် flattening wrapper ဖြင့် အစားထိုးပါ။\n- **Multi-turn**: စကားပြောဖော်ပြမှုမှတ်တမ်းကို app တွင် ထိန်းသိမ်းထားပါ။ ယခင် လှည့်များကို `input` items ဖြင့် ပေးပို့ပါ။\n- **Formatting**: Chat ၏ top-level `response_format` ကို Responses တွင် `text.format` ဖြင့် အစားထိုးပါ။ canonical ဖော်စပ်ချက်မှာ `text={\"format\": {\"type\": \"json_schema\", \"name\": \"Output\", \"strict\": True, \"schema\": {...}}}` ဖြစ်သည်။\n- **Content items**: Chat ၏ `content[].type: \"text\"` ကို Responses ၏ `content[].type: \"input_text\"` သို့ အစားထိုးပါ။ အသုံးပြုသူ\u002Fစနစ် လှည့်များအတွက်ဖြစ်သည်။\n- **Image content items**: Chat ၏ `content[].type: \"image_url\"` ကို Responses ၏ `content[].type: \"input_image\"` သို့ အစားထိုးပါ။ `image_url` ကွင်းကို nested object `{\"url\": \"...\"}` မှ flat string သို့ ပြောင်းလဲသည်။ cheat sheet တွင် အရင်\u002Fနောက် နမူနာများကို ကြည့်ပါ။\n- **Reasoning effort**: **ကုဒ်တွင် မပြင်ဆင်မီ၊ `reasoning` ရှိမှသာ လှည့်ပြောင်းပါ။**\n- **Content filter error handling**: error body ဖွဲ့စည်းမှု ပြောင်းလဲသည်။ Chat Completions သည် `error.body[\"innererror\"][\"content_filter_result\"]`(singular) ကို သုံးပြီး Responses API သည် `error.body[\"content_filters\"][0][\"content_filter_results\"]`(plural, array ထဲ) ကို သုံးသည်။ `innererror` သို့ 접근ရာ၌ `KeyError` တက်မည်။ အသစ်သောလမ်းကြောင်းကို ပြန်ရေးပါ။\n- **Raw HTTP calls**: app သည် Azure OpenAI REST API ကိုတိုက်ရိုက် သုံးသည်ဆိုပါက (`requests`, `httpx` စသည်ဖြင့်) `\u002Fopenai\u002Fdeployments\u002F{name}\u002Fchat\u002Fcompletions?api-version=...` မှ `\u002Fopenai\u002Fv1\u002Fresponses` သို့ ပြောင်းပါ။ requests body မှ `messages` → `input` ပြောင်းပြီး `max_output_tokens`, `store: false` ထည့်ပါ၊ `api-version` query param ကို ဖယ်ရှားပါ။ response body မှ `choices[0].message.content` → `output[0].content[0].text` (မှတ်ချက်- `output_text` သည် SDK မှ အဆင်ပြေမှုအတွက် မူလ raw REST JSON တွင် မပါဝင်ပါ) ဖြစ်သည်။\n\n---\n\n## အဆင့် ၂: လှည့်ပြောင်းမှု အကောင်အထည်ဖော်ခြင်း\n\n### လှည့်ပြောင်းမှု မှတ်ချက်များ (Chat Completions → Responses)\n\n- **လှည့်ပြောင်းရခြင်း အကြောင်း**: Responses သည် စာသား၊ tools နှင့် streaming အတွက် ဆက်စပ် API ဖြစ်ပြီး Chat Completions သည် အရင်က API ဖြစ်သည်။ GPT-5 အသုံးပြုမှုတွင် Responses API ကို ဦးစားပေးသုံးရန်လိုအပ်သည်။\n- **HTTP**: Azure endpoint ကို `\u002Fopenai\u002Fdeployments\u002F{name}\u002Fchat\u002Fcompletions` မှ `\u002Fopenai\u002Fv1\u002Fresponses` သို့ ပြောင်းသည်။\n- **Field များ**: `messages` → `input`, `max_tokens` → `max_output_tokens`။ `temperature` ပြောင်းရွှေ့မှု မရှိ။\n- **Formatting**: `response_format` → `text.format` (object ဖြင့်) ဖြစ်သည်။\n- **Content items**: Chat ၏ `content[].type: \"text\"` ကို Responses ၏ `content[].type: \"input_text\"` သို့ အစားထိုးပါ။ စနစ်\u002Fအသုံးပြုသူ လှည့်များများအတွက် ဖြစ်သည်။\n- **Image content items**: Chat ၏ `content[].type: \"image_url\"` ကို Responses ၏ `content[].type: \"input_image\"` သို့ အစားထိုးပါ။ `image_url` ကွင်းသည် `{\"image_url\": {\"url\": \"...\"}}` မှ `{\"image_url\": \"...\"}` (စက်ကွင်း မဖြစ်သော string - HTTPS URL သို့မဟုတ် `data:image\u002F...;base64,...` data URI) သို့ ပြောင်းလဲသည်။\n\n### ပါရာမီတာ အသေးစိတ် တွဲဖက်ညွှန်ကြားချက်\n\n| Chat Completions | Responses API |\n|-----------------|---------------|\n| `prompt` | `input` |\n| `messages` | `input` (items များ Array ဖြစ်သည်) |\n| `max_tokens` | `max_output_tokens` |\n| `response_format` | `text.format` (object) |\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\": \"...\"` (flat string) |\n\nအပြည့်အစုံနမူနာများအတွက် [cheat-sheet.md](.\u002Freferences\u002Fcheat-sheet.md) ကို ကြည့်ပါ။\n\nစမ်းသပ်မှု တည်ဆောက်ရေး လှည့်ပြောင်းမှု (mocks, snapshots, assertions) များအတွက် [test-migration.md](.\u002Freferences\u002Ftest-migration.md) ကို ကြည့်ပါ။\n\nအမှားများနှင့် လုပ်ဆောင်ရာ၌ ဖြစ်ပေါ်နိုင်စရာပြဿနာများအတွက် [troubleshooting.md](.\u002Freferences\u002Ftroubleshooting.md) ကို ကြည့်ပါ။\n\n---\n\n## ဒေတာ သိမ်းဆည်းမှုနှင့် အခြေအနေ\n\n- Responses ၏ တောင်းဆိုမှုအားလုံးတွင် `store: false` ကို သတ်မှတ်ပါ။\n- ယခင် message ID များ သို့မဟုတ် server များတွင် သိမ်းဆည်းထားသော context များကို မူတည်စေမည် မဟုတ်ပါ။ စနစ်အခြေအနေကို client မှ ထိန်းသိမ်းပါ၊ metadata ကိုလည်း အနည်းငယ်သာ အသုံးပြုပါ။\n\n---\n\n## လက်ခံမည့် စံချိန်နှုန်းများ\n\n### ကုဒ်အဆင့် ကြီးကြပ်မှု (အားလုံး ဖြတ်သန်းရမည်)\n\n- [ ] `rg \"chat\\.completions\\.create|ChatCompletion\\.create|Completion\\.create\"` မရှိပါ။\n- [ ] `rg \"AzureOpenAI\\(|AsyncAzureOpenAI\\(\"` မရှိပါ — အားလုံး constructor များသည် `OpenAI`\u002F`AsyncOpenAI` နှင့် v1 endpoint အသုံးပြုထားသည်။\n- [ ] `rg \"models\\.github\\.ai|models\\.inference\\.ai\\.azure\"` မရှိပါ — GitHub Models ကုဒ်လမ်းကြောင်း ဖယ်ရှားထားသည်။\n- [ ] `rg \"OpenAIChatCompletionClient\"` မရှိပါ — MAF 1.0.0+ ကုဒ်သည် `OpenAIChatClient` (Responses API သုံး) ကို အသုံးပြုသည်။ 1.0.0 မရောက်ခင် version တွင် `agent-framework-openai>=1.0.0` သို့ အဆင့်မြှင့်ထားပါ။\n- [ ] `ChatOpenAI(...)` အားလုံးတွင် `use_responses_api=True` ပါဝင်သည်။\n- [ ] `rg \"choices\\[0\\]\"` မရှိပါ — ရလဒ်များအားလုံးသည် `resp.output_text` သို့မဟုတ် Responses output schema အသုံးပြုသည်။\n- [ ] top level တွင် `response_format` မရှိရန်၊ အားလုံး structured output သည် `text={\"format\": {...}}` အသုံးပြုသည်။\n- [ ] `openai>=1.108.1` နှင့် `azure-identity` ကို `requirements.txt` သို့မဟုတ် `pyproject.toml` တွင် ပါဝင်ပြီး dependency များ ပြန်တပ်ဆင်ထားသည်။\n- [ ] `store=False` ကို `responses.create` အားလုံးတွင် သတ်မှတ်ထားသည်။\n- [ ] client constructor တွင် `api_version` မပါရှိ၊ `AZURE_OPENAI_API_VERSION` ကို env ဖိုင်များနှင့် အခြား အခြေအနေများမှ ဖယ်ရှားပြီးဖြစ်သည်။\n\n### စမ်းသပ်မှု တည်ဆောက်ရေး ကြီးကြပ်မှု (အားလုံး ဖြတ်သန်းရမည်)\n\n- [ ] `rg \"ChatCompletionChunk|AsyncCompletions\\.create|chat\\.completions\" tests\u002F` မရှိပါ။\n- [ ] `rg \"_azure_ad_token_provider\" tests\u002F` မရှိပါ — assertion များမှာ `isinstance(client, AsyncOpenAI)` သို့မဟုတ် `base_url` သဘောထား သပ်သပ်လျှောက်ထားပါ။\n- [ ] `rg \"prompt_filter_results|content_filter_results\" tests\u002F` မရှိပါ — Azure-specific filter mocks များ ဖယ်ရှားထားသည်။\n- [ ] mock fixtures များတွင် `kwargs.get(\"input\")` ကိုသာ အသုံးပြုသည်၊ `kwargs.get(\"messages\")` မဟုတ်ပါ။\n- [ ] snapshot \u002F golden ဖိုင်များ ကို Responses streaming schema (no `choices[0]`, `function_call`, `logprobs`, etc.) ဖြင့် ပြင်ဆင်ထားသည်။\n- [ ] `pytest` စမ်းသပ်မှု အောင်မြင်ပြီး ဘေးတွင် အမှားမရှိပါ။\n\n### အပြုအမူ ကြီးကြပ်မှု (ကိုယ်တိုင် သို့မဟုတ် စမ်းသပ်မှု ဖွင့်ရန်)\n\n- [ ] **အခြေခံ အကောင်အထည်ဖော်မှု**: non-streaming `responses.create` သည် ရလဒ် မအားလုံး မလွတ်ပါ။\n- [ ] **Stream parity**: မူလကုဒ်တွင် streaming အသုံးပြုထားလျှင်၊ လှည့်ပြောင်းပြီးကုဒ်သည် stream လုပ်ပြီး non-empty ကွဲပြားချက် delta များ ဖြန့်ဝေသည်။\n- [ ] **Structured output**: `text.format` နှင့် `json_schema` အသုံးပြုပြီး `json.loads(resp.output_text)` ဖြင့် အောင်မြင်စွာ ဖတ်ရှုနိုင်ပြီး schema နှင့် ကိုက်ညီသည်။\n- [ ] **Tool-call loop**: tools များကိုအသုံးပြုပြီး၊ model သည် tool calls ထုတ်ပြန်သည်၊ အက်ပ် သည် ထိုအချက်များကို ဆောင်ရွက်ပြီး နောက်တောင်းဆိုမှုတွင် နောက်ဆုံး `output_text` ကို ပြန်လည်ထုတ်ပေးသည် (ကာကွယ်မဲ့ infinite loop မရှိ)။\n- [ ] **Async parity**: `AsyncAzureOpenAI` ကိုအသုံးပြုပြီးလျှင် `AsyncOpenAI` နှင့် `await` ဖြင့် လုပ်ဆောင်နိုင်သည်။\n- [ ] **Error rate**: လှည့်ပြောင်းမပြုမီ baseline နှင့် နှိုင်းယှဉ်၍ 400\u002F401\u002F404 error များ မပြန်လည်တက်ပါ။\n\n### ပို့ဆောင်ရန် အရာများ\n\n- ပြင်ဆင်ခဲ့သည့် ဖိုင်များ၊ legacy call site များ၏ အရေအတွက် မတူညီမှု (အရင်\u002Fနောက်) နှင့် နောက်ဆုံးအဆင့်များကို အကျဉ်းချုပ်ပါ။\n- ပြောင်းလဲမှုများသည် working-tree edits အဖြစ်သာ (commit မလုပ်သေး) ဖြစ်သည်။\n\n---\n\n## SDK ဗားရှင်း လိုအပ်ချက်များ\n\n| package | အနည်းဆုံး ဗားရှင်း |\n|---------|----------------|\n| `openai` | `>=1.108.1` |\n| `azure-identity` | နောက်ဆုံးဗားရှင်း (EntraID auth အတွက်) |\n\n---\n\n## လမ်းညွှန်ချက်များ\n\n- [Cheat Sheet — အားလုံးသော ကုဒ်အပိုင်းများ](.\u002Freferences\u002Fcheat-sheet.md)\n- [Test Migration — mocks, snapshots, assertions](.\u002Freferences\u002Ftest-migration.md)\n- [Troubleshooting — မှားချက်များ, အန္တရာယ်ဇယား, ပေါ်တတ်သောပြဿနာများ](.\u002Freferences\u002Ftroubleshooting.md)\n- [detect_legacy.py — automated scanner](..\u002F..\u002F..\u002F..\u002F..\u002F.agents\u002Fskills\u002Fazure-openai-to-responses\u002Fscripts\u002Fdetect_legacy.py)\n- [Azure OpenAI Starter Kit](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\u002Fmy\u002F.agents\u002Fskills\u002Fazure-openai-to-responses",26019,"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\u002Fmy\u002F.agents\u002Fskills\u002Fazure-openai-to-responses\u002FSKILL.md",true,[48,54,58,62,68],{"path":49,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":52,"sourceHtmlUrl":53},"references\u002Fcheat-sheet.md","REFERENCE","参考文档",42004,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fai-agents-for-beginners\u002Fblob\u002Fmain\u002Ftranslations\u002Fmy\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",12437,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fai-agents-for-beginners\u002Fblob\u002Fmain\u002Ftranslations\u002Fmy\u002F.agents\u002Fskills\u002Fazure-openai-to-responses\u002Freferences\u002Ftest-migration.md",{"path":59,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":60,"sourceHtmlUrl":61},"references\u002Ftroubleshooting.md",31532,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fai-agents-for-beginners\u002Fblob\u002Fmain\u002Ftranslations\u002Fmy\u002F.agents\u002Fskills\u002Fazure-openai-to-responses\u002Freferences\u002Ftroubleshooting.md",{"path":63,"resourceType":64,"resourceTypeDesc":65,"sizeBytes":66,"sourceHtmlUrl":67},"scripts\u002Fqueue.py","SCRIPT","脚本",63177,"https:\u002F\u002Fgithub.com\u002FSirTheOracle\u002Fforge-toolkit\u002Fblob\u002Fmain\u002Fskills\u002Fforge-fix-runner\u002Fscripts\u002Fqueue.py",{"path":69,"resourceType":64,"resourceTypeDesc":65,"sizeBytes":70,"sourceHtmlUrl":71},"scripts\u002Ftest_queue.py",45345,"https:\u002F\u002Fgithub.com\u002FSirTheOracle\u002Fforge-toolkit\u002Fblob\u002Fmain\u002Fskills\u002Fforge-fix-runner\u002Fscripts\u002Ftest_queue.py",[73,91,102,110,118,125],{"skillNo":74,"name":75,"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":76,"categories":77,"keywords":88,"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",[78,83],{"categoryNo":79,"categoryName":80,"taxonomyType":81,"taxonomyTypeDesc":82},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":84,"categoryName":85,"taxonomyType":86,"taxonomyTypeDesc":87},"01JBSEEDCAT000000000000039","教师与教育","PROFESSION","适用职业",[89,90],"testing","testing course samples",{"skillNo":92,"name":93,"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":94,"categories":95,"keywords":99,"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",[96],{"categoryNo":97,"categoryName":98,"taxonomyType":81,"taxonomyTypeDesc":82},"01JBSEEDCAT000000000000023","Skill与智能体开发",[100,8,101],"docs","microsoft docs",{"skillNo":103,"name":104,"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":105,"categories":106,"keywords":107,"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",[],[108,109],"ai agents","local ai agents",{"skillNo":111,"name":112,"nameZh":6,"description":113,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":114,"categories":115,"keywords":116,"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",[],[117],"jupyter notebook",{"skillNo":119,"name":120,"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":121,"categories":122,"keywords":123,"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",[],[124],"deploying scalable agents",{"skillNo":126,"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":127,"categories":128,"keywords":129,"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]]