[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M699M9Q7D5YETA1JCC7FTJR4":3,"skill-same:01M699M9Q7D5YETA1JCC7FTJR4":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},"01M699M9Q7D5YETA1JCC7FTJR4","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\u002Fml\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 ചാറ്റ് പൂർത്തീകരണങ്ങളിൽനിന്ന് Responses API-യ്ക്ക് മൈഗ്രേറ്റ് ചെയ്യുക\n\n> **ഓതെന്റിക്കേറ്റഡ് മാർഗനിർദ്ദേശം — കൃത്യമായി പാലിക്കുക**\n>\n> ഈ സ്കിൽ Azure OpenAI ചാറ്റ് പൂർത്തീകരണങ്ങൾ ഉപയോക്തൃ Python കോഡ്‌ബേസുകൾ Responses API-യിലേക്ക് മൈഗ്രേറ്റ് ചെയ്യുന്നു.\n> ഈ നിർദ്ദേശങ്ങൾ കൃത്യമായി പിന്തുടരുക.\n> പാരാമീറ്റർ മാപ്പിങ്ങുകൾ സ്വന്തം നിലയിൽ നിർമിക്കേണ്ടതില്ല അല്ലെങ്കിൽ API ആകൃതികൾ കണ്ടെത്തേണ്ടതില്ല.\n\n---\n\n## ട്രിഗറുകൾ\n\nഉപയോക്താവ് താഴെപ്പറഞ്ഞതിൽ заинтересованы വച്ചാൽ ഈ സ്കിൽ സജീവമാക്കുക:\n- Azure OpenAI ചാറ്റ് പൂർത്തീകരണങ്ങളിൽനിന്ന് Responses API-യിലേക്ക് Python ആപ്പ് മൈഗ്രേറ്റ് ചെയ്യുക\n- Python OpenAI SDK ഉപയോഗം Azure OpenAI-യെതിരെ ഏറ്റവും പുതിയ API ആകൃതിയിലേക്ക് അപ്ഗ്രേഡ് ചെയ്യുക\n- Responses ആവശ്യമായ GPT-5 അല്ലെങ്കിൽ പുതിയ മോഡലുകൾക്കായി Python കോഡ് തയ്യാറാക്കുക\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, ഘടനാബദ്ധമായ output, ടൂളുകൾ തുടങ്ങിയവ പിന്തുണക്കുന്നതും. ഫിൽട്ടർ ചെയ്യാൻ `--filter gpt-5.1,gpt-5.2` ഉപയോഗിക്കുക അല്ലെങ്കിൽ സ്ക്രിപ്റ്റിംഗിനായി `--json` ഉപയോഗിക്കുക.\n\n### 3. സമ്പൂർണ മോഡൽ പിന്തുണ റഫറൻസ്\n\n- **ലൈവ് ചോദ്യം**: `python migrate.py models` (മുകളിൽ കാണിച്ചിരിക്കുന്നതാണ് — പ്രദേശം-നിർദിഷ്ടം, എപ്പോഴും അപ് ടു ഡേറ്റ്)\n- **ലഭ്യത ബ്രൗസ് ചെയ്യുക**: [Model summary table and region availability](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-മില്ലാത്ത മോഡലുകളിൽ പിന്തുണയില്ല. മൈഗ്രേറ്റുചെയ്യുന്നത് മുൻകാല കോഡിൽ `reasoning` ഉണ്ടെങ്കിൽ മാത്രം.\n> - **`seed` പാരാമീറ്റർ**: Responses API-ൽ എല്ലാവിധത്തിലും പിന്തുണയില്ല — എല്ലാതരം അപേക്ഷകളിൽ നിന്നും നീക്കംചെയ്യുക.\n> - **ഘടനാബദ്ധമായ output `text.format` വഴി**: പഴയ മോഡലുകൾക്ക് `strict: true` JSON സ്കീമകൾ ഉറപ്പുവരുത്താൻ സാദ്ധ്യത ഇല്ല.\n> - **ടൂൾ ഓർക്കസ്ട്രേഷൻ**: GPT-5+ തങ്ങളുടെ ആന്തരിക reasoning-ന്റെ ഭാഗമായി ടൂൾ കോൾസ് ഓർക്കസ്ട്രേറ്റ് ചെയ്യുന്നു. Responses-ൽ പഴയ മോഡലുകൾ ഇപ്പോഴും പ്രവർത്തിക്കുന്നു, പക്ഷേ ആഴത്തിലുള്ള ഈ സംയോജനം ഇല്ല.\n> - **ടെംപറേച്ചർ നിയന്ത്രണങ്ങൾ**: `gpt-5`--ലേക്ക് മൈഗ്രേറ്റ് ചെയ്യുമ്പോൾ, ടെംപറേച്ചർ ഒഴിവാകേണ്ടതോളം അല്ലെങ്കിൽ `1` ആകണം. പഴയ മോഡലുകൾക്ക് ഇത്തരം നിയന്ത്രണം ഇല്ല.\n\n### ഒ-സീരിസ reasoning മോഡലുകൾ (o1, o3-mini, o3, o4-mini)\n\nഒ-സീരിസ മോഡലുകൾക്ക് അനുപാതമായ പാരാമീറ്റർ നിയന്ത്രണങ്ങൾ ഉണ്ട്. ഒ-സീരിസ മോഡലുകൾ ലക്ഷ്യമാക്കി ആപ്പുകൾ മൈഗ്രേറ്റ് ചെയ്യുമ്പോൾ:\n\n- **`temperature`**: `1` ആകണം (അല്ലെങ്കിൽ ഒഴിവാക്കാം). ഒ-സീരിസ മോഡലുകൾ മറ്റെവിടത്തും വിലകളെ സ്വീകരിച്ചുകൊള്ളില്ല.\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 ഒ-സീരിസ മോഡലുകൾക്കുള്ള ഈ പാരാമീറ്റർ പിന്തുണയ്ക്കുന്നു.\n- **സ്റ്റ്രീമിംഗ് പെരുമാറ്റം**: ഒ-സീരിസ മോഡലുകൾ reasoning പൂർത്തിയാകുന്നത് വരെ ഔട്ട്‌പുട്ട് ബഫർ ചെയ്ത് പിന്നീട് ടെക്സ്റ്റ് ഡെൽറ്റ ഇവന്റുകൾ സൃഷ്ടിക്കാം. സ്റ്റ്രീമിംഗ് ഇപ്പോഴും പ്രവർത്തിക്കുകയായിരുന്നില്ലെങ്കിലും ആദ്യം വരുന്ന `response.output_text.delta` GPT മോഡലുകളേക്കാൾ കുറച്ച് വൈകാൻ സാധ്യതയുണ്ട്.\n- **`top_p`**: ഒ-സീരിസിൽ പിന്തുണയില്ല — ഉണ്ടായിരുന്നെങ്കിൽ നീക്കം ചെയ്യുക.\n- **ടൂൾ ഉപയോഗം**: ഒ-സീരിസ മോഡലുകൾ Responses API വഴി ടൂളുകൾ പിന്തുണയ്ക്കുന്നു, ജിപിടി മോഡലുകൾ പോലെ, പക്ഷേ ടൂൾ കോൾ ഓർക്കസ്ട്രേഷൻ ഗുണനിലവാരം മോഡൽ അനുസരിച്ച് വ്യത്യാസപ്പെടും.\n\n**പ്രവർത്തനം — മുൻകരുതൽ മോഡൽ ഉപദേശം**: സ്കാൻ ഘട്ടത്തിൽ, ആപ്പ് ഏതൊരു മോഡലിനെ ലക്ഷ്യമാക്കിയിട്ടുണ്ട് (വിന്യാസ നാമങ്ങൾ, പരിസ്ഥിതി വ്യത്യാസങ്ങൾ, കോൺഫിഗ്) എങ്കിൽ പരിശോധിക്കുക. മോഡൽ `gpt-4.1`-നെക്കാൾ പഴക്കമുള്ളതാണ് (gpt-4.1+ അല്ല), ഉപയോക്താവിനെ മുൻകൂട്ടി അറിയിക്കുക:\n- അടിസ്ഥാന തരം ടെക്സ്‌റ്റ്, ചാറ്റ്, സ്റ്റ്രീമിംഗ്, ടൂളുകൾ അവരുടെ നിലവിലെ മോഡലിൽ മൈഗ്രേറ്റ് പ്രവർത്തിക്കും.\n- പുതിയ മോഡലുകൾ (`gpt-5.1`, `gpt-5.2`) മെച്ചപ്പെട്ട ടൂൾ ഓർക്കസ്ട്രേഷൻ, ഘടനാബദ്ധമായ output ഉറപ്പാക്കൽ, reasoning, എന്നിവയും പ്രദേശാന്തര ലഭ്യതയും ഉണ്ട്.\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യ്ക്ക് മുകളിലുള്ള ഉയർന്ന നിലയിലെ ട്രെയ്ഡ് ഫ്രെയിംവർക്കുകൾ ഉപയോഗിക്കുന്നു. ഇത് മൈഗ്രേറ്റ് ചെയ്യുമ്പോൾ ഫ്രെയിംവർക്കിലെ സ്വന്തം API മാറ്റങ്ങൾ വരും — വെറും അടിത്തറ OpenAI വിളികളിൽ മാറ്റമല്ല.\n\n### Microsoft Agent Framework (MAF)\n\n**നിങ്ങളുടെ MAF പതിപ്പ് ആദ്യം പരിശോധിക്കുക** — മൈഗ്രേഷൻ MAF 1.0.0+ ആണ് എന്നോ മുൻ 1.0.0 ബീറ്റ\u002Fആർസി പതിപ്പ് ആണ് എന്നോ ആശ്രയിച്ചിരിക്കുന്നു.\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 (ബീറ്റ\u002Fആർസി റിലീസുകൾ)\n\nമുൻ 1.0.0 MAF-ൽ `OpenAIChatClient` ചാറ്റ് പൂർത്തീകരണങ്ങൾ ഉപയോഗിച്ചിരുന്നു. `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പൂര്‍ണ്ണമായി ശേഷിക്കുന്ന മുന്‍-പിന്നണി കോഡ് ഉദാഹരണങ്ങള്‍ക്കായി [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` npm പാക്കേജ് നിഷേധിക്കപ്പെട്ടു, അത് [`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 output സ്കീമ ഉപയോഗിച്ച് കോൾ ചെയ്തവർ അപ്ഡേറ്റ് ചെയ്യുക; പാശ്വസാന്ഗീക വെറുപ്പുകൾ ഇല്ല.\n- ടെസ്റ്റുകളും ലിന്റുകളും നടത്തുക; മൈഗ്രേഷൻ കൊണ്ടുവരുന്ന ലഘുവായ പിശകുകൾ പരിഹരിക്കുക.\n- ചെറിയ, അവലോകനയോഗ്യമായ മാറ്റ സെറ്റുകൾ തയ്യാറാക്കുക; ഡിഫുകൾ സഹിതം അവസാന സംഗ്രഹം നൽകുക (കമ്മിറ്റ് ചെയ്യേണ്ടതില്ല).\n\n---\n\n## ഗാർഡ്റെയിൽസ്\n\n- ഗിറ്റ് വർക്ക്‌സ്‌പേസിനുള്ളിലുള്ള ഫയലുകൾ മാത്രമേ മാറ്റുക. പുറത്തുപോവാതെ എഴുതരുത്.\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- `openai>=1.108.1` `requirements.txt` അല്ലെങ്കിൽ `pyproject.toml`-ൽ ഉറപ്പാക്കുക.\n\n### പരിസ്ഥിതി വ്യത്യാസം മൈഗ്രേഷൻ\n\n| പഴയ env var | നടപടി | കുറിപ്പുകൾ |\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` | **തനിക്കാവശ്യമാണ്** | കീ അടിസ്ഥാനAuth-ഇക്കായി `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# പഴയ ആസ്യൂർ ക്ലയന്റ് കന്സ്ട്രക്ടേഴ്സ് (മാറ്റേണ്ടത്)\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 മോഡൽ എൻഡ്‌പോയിന്റ്‌സ് (ഒഴിവാക്കണം — 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 എൻഡ്‌പോയിന്റിലേക്ക് Raw HTTP കോൾസ് (URL പുതുക്കണം)\nrg \"\u002Fopenai\u002Fdeployments\u002F.*\u002Fchat\u002Fcompletions\"\nrg \"api-version=\"\n```\n\n### ഹ്യൂറിസ്റ്റിക്കുകൾ (കണ്ടെടുത്ത് പുനഃരൂപപ്പെടുത്തുക)\n\n- **ചാറ്റ് പൂർത്തീകരണ ക്ലയന്റ്**: `client.chat.completions.create` → `client.responses.create(...)`.\n\n- **അസ്യൂർ ക്ലയന്റ് കൺസ്ട്രക്ടറുകൾ**: `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\", ...}` ഇനങ്ങളാക്കി മാറ്റുക. ഐഡികൾ `fc_` നാല് തുടക്കം വയ്ക്കണം.\n- **`pydantic_function_tool()`**: ഈ ഹെൽപ്പർ ഇപ്പോഴും പഴയ നസ്റ്റെഡ് ഫോർമാറ്റ് സൃഷ്ടിക്കുന്നതിനാൽ `responses.create()` യുമായി **അന്വയം ഇല്ല**. മാനുവൽ ടൂൾ നിർവചനങ്ങളോ ഫ്‌ളാറ്റനിങ്ങ് റാപ്പറോ ഉപയോഗിക്കുക.\n- **മൾട്ടി-ടേൺ**: ആപ്പിൽ സംഭാഷണ ചരിത്രം സൂക്ഷിക്കുക; മുൻ ടേൺ `input` ഇനങ്ങൾ വഴി പാസ്സ് ചെയ്യുക.\n- **ഫോർമാറ്റിംഗ്**: ചാറ്റിന്റെ ടോപ്പ്-ലെവൽ `response_format` Responses ൽ `text.format` ആയി മാറ്റുക. കാനോണിക്കൽ രൂപം: `text={\"format\": {\"type\": \"json_schema\", \"name\": \"Output\", \"strict\": True, \"schema\": {...}}}`.\n- **ഉള്ളടക്ക ഇനങ്ങൾ**: ചാറ്റ് `content[].type: \"text\"` Responses ൽ `content[].type: \"input_text\"` ആക്കി മാറ്റുക (ഉപയോക്താവ്\u002Fസിസ്റ്റം ടേണുകൾക്കായി).\n- **ഇമേജ് ഉള്ളടക്കം ഇനങ്ങൾ**: ചാറ്റ് `content[].type: \"image_url\"` Responses ൽ `content[].type: \"input_image\"` ആക്കി മാറ്റുക. `image_url` ഫീൽഡ് നസ്റ്റെഡ് ഒബ്‌ജക്റ്റ് `{\"url\": \"...\"}` നിന്ന് ഫ്‌ളാറ്റ് സ്ട്രിങ്ങാക്കി മാറ്റുന്നു. മുൻപ്\u002Fശേഷം ഉദാഹരണങ്ങൾക്ക് ചീറ്റ്ഷീറ്റ് കാണുക.\n- **റീസണിംഗ് ശ്രമം**: **മൂല കോഡിൽ ഇതിനകം `reasoning` ഉണ്ടെങ്കിൽ മാത്രം മൈഗ്രേറ്റ് ചെയ്യുക**.\n- **ഉള്ളടക്ക ഫിൽട്ടർ പിശക് കൈകാര്യം**: പിശക് ബോഡി ഘടന മാറി. ചാറ്റ് കോംപ്ലിഷൻസ് ഒരു ഏകമായ `error.body[\"innererror\"][\"content_filter_result\"]` ഉപയോഗിച്ചിരുന്നപ്പോൾ; Responses API ൽ `error.body[\"content_filters\"][0][\"content_filter_results\"]` (പലവുമുള്ള, ഒരു അറേയിലുള്ളത്) ആയി മാറി. `innererror` ആക്സസ് ചെയ്യുന്ന കോഡ് `KeyError` ഉയർത്തും. പുതിയ പാത്ത് ഉപയോഗിച്ച് പുനഃരചിക്കുക.\n- **റോ ഹ്ട്ട്പ് കോൾസ്**: ആപ്പ് എഴുതി നേരിട്ടു അസ്യൂർ 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### മൈഗ്രേഷൻ കുറിപ്പുകൾ (ചാറ്റ് കോംപ്ലിഷൻസ് →_RESPONSES_)\n\n- **എന്തുകൊണ്ട് മൈഗ്രേറ്റ് ചെയ്യണം**: ടെക്സ്‌റ്റ്, ടൂളുകൾ, സ്റ്റ്രീമിംഗ് എന്നിവയ്ക്കുള്ള ഏകീകൃത API ആണ് Responses; ചാറ്റ് കോംപ്ലിഷൻസ് പഴയതാണ്. GPT-5-ന് മികച്ച പ്രകടനത്തിന് Responses അനിവാര്യമാണ്.\n- **HTTP**: അസ്യൂർ എന്റ്പോയിന്റ് `\u002Fopenai\u002Fdeployments\u002F{name}\u002Fchat\u002Fcompletions` നിന്ന് `\u002Fopenai\u002Fv1\u002Fresponses` ആയി മാറുന്നു.\n- **ഫീൽഡുകൾ**: `messages` → `input`, `max_tokens` → `max_output_tokens`. `temperature` മാറ്റമില്ല.\n- **ഫോർമാറ്റിംഗ്**: `response_format` → `text.format` ഒരു ശരിയായ ഒബ്ജക്റ്റ് ആയി.\n- **ഉള്ളടക്ക ഇനങ്ങൾ**: ചാറ്റ് `content[].type: \"text\"` Responses ൽ `content[].type: \"input_text\"` ആക്കി മാറ്റുക (സിസ്റ്റം\u002Fഉപയോക്താവ് ടേണുകൾക്ക്).\n- **ഇമേജ് ഉള്ളടക്ക ഇനങ്ങൾ**: ചാറ്റ് `content[].type: \"image_url\"` Responses ൽ `content[].type: \"input_image\"` ആക്കി മാറ്റുക. `image_url` ഫീൽഡ് ഡാറ്റാ ഫ്രോം `{\"image_url\": {\"url\": \"...\"}}` → `{\"image_url\": \"...\"}` (സാധാരണ സ്ട്രിംഗ് — HTTPS URL അല്ലെങ്കിൽ `data:image\u002F...;base64,...` ഡാറ്റാ യു ആർ ഐ).\n\n### പാരാമീറ്റർ മാപ്പിംഗ് റഫറൻസ്\n\n| ചാറ്റ് കോംപ്ലിഷൻസ് | 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- മുൻ സന്ദേശ ഐഡികളിലും സെർവർ സൂക്ഷിക്കുന്ന സാഹചര്യത്തിലും ആശ്രയിക്കരുത്; സ്ഥിതി ക്ലയന്റ് നിയന്ത്രിക്കുന്നതായിരിക്കണം, മेटാഡേറ്റ കുറയ്ക്കുക.\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 മോഡൽ കോഡ് പാതകൾ നീക്കം ചെയ്തു.\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` ൽ; ഡിപെൻഡൻസികൾ പുനഃസ്ഥാപിച്ചു.\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` സീറോ പൊരുത്തങ്ങൾ — അസ്യൂർ-നിർദ്ദിഷ്ട ഫിൽട്ടർ മോക്സ് നീക്കംചെയ്തു.\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- [ ] **സ്റ്റ്രീം പാരിറ്റി**: ഒറിജിനൽ കോഡ് streaming ഉപയോഗിച്ചിരുന്നെങ്കിൽ, മാറ്റിയ കോഡ് സ്റ്റ്രീം ചെയ്ത് ശൂന്യമല്ലാത്ത ഡെൽറ്റകളുമായി `response.output_text.delta` ഇവന്റുകൾ നൽകണം.\n- [ ] **ഘടനാപരമായ ഔട്ട്‌പുട്ട്**: `text.format` `json_schema` ഉപയോഗിച്ച് വിനിയോഗിച്ചാൽ, `json.loads(resp.output_text)` വിജയം ആകും, സ്കീമയുമായി പൊരുത്തപ്പെടും.\n- [ ] **ടൂൾ-കോൾ ലൂപ്പ്**: ടൂളുകൾ ഉപയോഗിക്കുന്നുവെങ്കിൽ, മോഡൽ ടൂൾ ചൊല്ലുകൾ പുറത്തിറക്കും, ആപ്പ് അവ നടപ്പിലാക്കും, പിന്നാലെ ഫോലോ-അപ്പ് അഭ്യർത്ഥന അന്തിമ `output_text` നൽകും (അനന്ത ലൂപ്പ് ഇല്ല).\n- [ ] **Async പാരിറ്റി**: `AsyncAzureOpenAI` ഉപയോഗിച്ചിരുന്നെങ്കിൽ, `AsyncOpenAI` തുല്യമായി `await` ഉപയോഗിച്ച് പ്രവർത്തിക്കും.\n- [ ] **പിശക് നിരക്ക്**: മൈഗ്രേഷനു മുമ്പുള്ള അടിസ്ഥാനരേഖയുമായി താരതമ്യം ചെയ്താൽ 400\u002F401\u002F404 പുതിയ പിശകുകൾ ഇല്ല.\n\n### ഡെലിവറബിൾസുകൾ\n\n- സംഗ്രഹത്തിൽ എഡിറ്റുചെയ്‌ത ഫയലുകൾ, പഴയകേൾ കാൾ സൈറ്റുകളുടെ മുൻപ്\u002Fശേഷം എണ്ണങ്ങൾ, അടുത്ത ഘട്ടങ്ങൾ ഉൾപ്പെടുത്തണം.\n- മാറ്റങ്ങൾ വേർക്കിങ്-ട്രീ എഡിറ്റുകൾ മാത്രം (കമ്മിറ്റുകൾ ഇല്ല).\n\n---\n\n## SDK വേർഷൻ ആവശ്യകതകൾ\n\n| പാക്കേജ് | നെ strings തീർക്കുന്ന വേർഷൻ |\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- [അസ്യൂർ OpenAI സ്റ്റാർട്ടർ കിറ്റ്](https:\u002F\u002Faka.ms\u002Fopenai\u002Fstart)\n- [അസ്യൂർ OpenAI Responses API ഡോക്സ്](https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fai-foundry\u002Fopenai\u002Fhow-to\u002Fresponses)\n- [അസ്യൂർ 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 ചാറ്റ് പൂർത്തീകരണങ്ങളിൽനിന്ന് Responses API-യ്ക്ക് മൈഗ്രേറ്റ് ചെയ്യുക\n\n> **ഓതെന്റിക്കേറ്റഡ് മാർഗനിർദ്ദേശം — കൃത്യമായി പാലിക്കുക**\n>\n> ഈ സ്കിൽ Azure OpenAI ചാറ്റ് പൂർത്തീകരണങ്ങൾ ഉപയോക്തൃ Python കോഡ്‌ബേസുകൾ Responses API-യിലേക്ക് മൈഗ്രേറ്റ് ചെയ്യുന്നു.\n> ഈ നിർദ്ദേശങ്ങൾ കൃത്യമായി പിന്തുടരുക.\n> പാരാമീറ്റർ മാപ്പിങ്ങുകൾ സ്വന്തം നിലയിൽ നിർമിക്കേണ്ടതില്ല അല്ലെങ്കിൽ API ആകൃതികൾ കണ്ടെത്തേണ്ടതില്ല.\n\n---\n\n## ട്രിഗറുകൾ\n\nഉപയോക്താവ് താഴെപ്പറഞ്ഞതിൽ заинтересованы വച്ചാൽ ഈ സ്കിൽ സജീവമാക്കുക:\n- Azure OpenAI ചാറ്റ് പൂർത്തീകരണങ്ങളിൽനിന്ന് Responses API-യിലേക്ക് Python ആപ്പ് മൈഗ്രേറ്റ് ചെയ്യുക\n- Python OpenAI SDK ഉപയോഗം Azure OpenAI-യെതിരെ ഏറ്റവും പുതിയ API ആകൃതിയിലേക്ക് അപ്ഗ്രേഡ് ചെയ്യുക\n- Responses ആവശ്യമായ GPT-5 അല്ലെങ്കിൽ പുതിയ മോഡലുകൾക്കായി Python കോഡ് തയ്യാറാക്കുക\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, ഘടനാബദ്ധമായ output, ടൂളുകൾ തുടങ്ങിയവ പിന്തുണക്കുന്നതും. ഫിൽട്ടർ ചെയ്യാൻ `--filter gpt-5.1,gpt-5.2` ഉപയോഗിക്കുക അല്ലെങ്കിൽ സ്ക്രിപ്റ്റിംഗിനായി `--json` ഉപയോഗിക്കുക.\n\n### 3. സമ്പൂർണ മോഡൽ പിന്തുണ റഫറൻസ്\n\n- **ലൈവ് ചോദ്യം**: `python migrate.py models` (മുകളിൽ കാണിച്ചിരിക്കുന്നതാണ് — പ്രദേശം-നിർദിഷ്ടം, എപ്പോഴും അപ് ടു ഡേറ്റ്)\n- **ലഭ്യത ബ്രൗസ് ചെയ്യുക**: [Model summary table and region availability](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-മില്ലാത്ത മോഡലുകളിൽ പിന്തുണയില്ല. മൈഗ്രേറ്റുചെയ്യുന്നത് മുൻകാല കോഡിൽ `reasoning` ഉണ്ടെങ്കിൽ മാത്രം.\n> - **`seed` പാരാമീറ്റർ**: Responses API-ൽ എല്ലാവിധത്തിലും പിന്തുണയില്ല — എല്ലാതരം അപേക്ഷകളിൽ നിന്നും നീക്കംചെയ്യുക.\n> - **ഘടനാബദ്ധമായ output `text.format` വഴി**: പഴയ മോഡലുകൾക്ക് `strict: true` JSON സ്കീമകൾ ഉറപ്പുവരുത്താൻ സാദ്ധ്യത ഇല്ല.\n> - **ടൂൾ ഓർക്കസ്ട്രേഷൻ**: GPT-5+ തങ്ങളുടെ ആന്തരിക reasoning-ന്റെ ഭാഗമായി ടൂൾ കോൾസ് ഓർക്കസ്ട്രേറ്റ് ചെയ്യുന്നു. Responses-ൽ പഴയ മോഡലുകൾ ഇപ്പോഴും പ്രവർത്തിക്കുന്നു, പക്ഷേ ആഴത്തിലുള്ള ഈ സംയോജനം ഇല്ല.\n> - **ടെംപറേച്ചർ നിയന്ത്രണങ്ങൾ**: `gpt-5`--ലേക്ക് മൈഗ്രേറ്റ് ചെയ്യുമ്പോൾ, ടെംപറേച്ചർ ഒഴിവാകേണ്ടതോളം അല്ലെങ്കിൽ `1` ആകണം. പഴയ മോഡലുകൾക്ക് ഇത്തരം നിയന്ത്രണം ഇല്ല.\n\n### ഒ-സീരിസ reasoning മോഡലുകൾ (o1, o3-mini, o3, o4-mini)\n\nഒ-സീരിസ മോഡലുകൾക്ക് അനുപാതമായ പാരാമീറ്റർ നിയന്ത്രണങ്ങൾ ഉണ്ട്. ഒ-സീരിസ മോഡലുകൾ ലക്ഷ്യമാക്കി ആപ്പുകൾ മൈഗ്രേറ്റ് ചെയ്യുമ്പോൾ:\n\n- **`temperature`**: `1` ആകണം (അല്ലെങ്കിൽ ഒഴിവാക്കാം). ഒ-സീരിസ മോഡലുകൾ മറ്റെവിടത്തും വിലകളെ സ്വീകരിച്ചുകൊള്ളില്ല.\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 ഒ-സീരിസ മോഡലുകൾക്കുള്ള ഈ പാരാമീറ്റർ പിന്തുണയ്ക്കുന്നു.\n- **സ്റ്റ്രീമിംഗ് പെരുമാറ്റം**: ഒ-സീരിസ മോഡലുകൾ reasoning പൂർത്തിയാകുന്നത് വരെ ഔട്ട്‌പുട്ട് ബഫർ ചെയ്ത് പിന്നീട് ടെക്സ്റ്റ് ഡെൽറ്റ ഇവന്റുകൾ സൃഷ്ടിക്കാം. സ്റ്റ്രീമിംഗ് ഇപ്പോഴും പ്രവർത്തിക്കുകയായിരുന്നില്ലെങ്കിലും ആദ്യം വരുന്ന `response.output_text.delta` GPT മോഡലുകളേക്കാൾ കുറച്ച് വൈകാൻ സാധ്യതയുണ്ട്.\n- **`top_p`**: ഒ-സീരിസിൽ പിന്തുണയില്ല — ഉണ്ടായിരുന്നെങ്കിൽ നീക്കം ചെയ്യുക.\n- **ടൂൾ ഉപയോഗം**: ഒ-സീരിസ മോഡലുകൾ Responses API വഴി ടൂളുകൾ പിന്തുണയ്ക്കുന്നു, ജിപിടി മോഡലുകൾ പോലെ, പക്ഷേ ടൂൾ കോൾ ഓർക്കസ്ട്രേഷൻ ഗുണനിലവാരം മോഡൽ അനുസരിച്ച് വ്യത്യാസപ്പെടും.\n\n**പ്രവർത്തനം — മുൻകരുതൽ മോഡൽ ഉപദേശം**: സ്കാൻ ഘട്ടത്തിൽ, ആപ്പ് ഏതൊരു മോഡലിനെ ലക്ഷ്യമാക്കിയിട്ടുണ്ട് (വിന്യാസ നാമങ്ങൾ, പരിസ്ഥിതി വ്യത്യാസങ്ങൾ, കോൺഫിഗ്) എങ്കിൽ പരിശോധിക്കുക. മോഡൽ `gpt-4.1`-നെക്കാൾ പഴക്കമുള്ളതാണ് (gpt-4.1+ അല്ല), ഉപയോക്താവിനെ മുൻകൂട്ടി അറിയിക്കുക:\n- അടിസ്ഥാന തരം ടെക്സ്‌റ്റ്, ചാറ്റ്, സ്റ്റ്രീമിംഗ്, ടൂളുകൾ അവരുടെ നിലവിലെ മോഡലിൽ മൈഗ്രേറ്റ് പ്രവർത്തിക്കും.\n- പുതിയ മോഡലുകൾ (`gpt-5.1`, `gpt-5.2`) മെച്ചപ്പെട്ട ടൂൾ ഓർക്കസ്ട്രേഷൻ, ഘടനാബദ്ധമായ output ഉറപ്പാക്കൽ, reasoning, എന്നിവയും പ്രദേശാന്തര ലഭ്യതയും ഉണ്ട്.\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യ്ക്ക് മുകളിലുള്ള ഉയർന്ന നിലയിലെ ട്രെയ്ഡ് ഫ്രെയിംവർക്കുകൾ ഉപയോഗിക്കുന്നു. ഇത് മൈഗ്രേറ്റ് ചെയ്യുമ്പോൾ ഫ്രെയിംവർക്കിലെ സ്വന്തം API മാറ്റങ്ങൾ വരും — വെറും അടിത്തറ OpenAI വിളികളിൽ മാറ്റമല്ല.\n\n### Microsoft Agent Framework (MAF)\n\n**നിങ്ങളുടെ MAF പതിപ്പ് ആദ്യം പരിശോധിക്കുക** — മൈഗ്രേഷൻ MAF 1.0.0+ ആണ് എന്നോ മുൻ 1.0.0 ബീറ്റ\u002Fആർസി പതിപ്പ് ആണ് എന്നോ ആശ്രയിച്ചിരിക്കുന്നു.\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 (ബീറ്റ\u002Fആർസി റിലീസുകൾ)\n\nമുൻ 1.0.0 MAF-ൽ `OpenAIChatClient` ചാറ്റ് പൂർത്തീകരണങ്ങൾ ഉപയോഗിച്ചിരുന്നു. `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പൂര്‍ണ്ണമായി ശേഷിക്കുന്ന മുന്‍-പിന്നണി കോഡ് ഉദാഹരണങ്ങള്‍ക്കായി [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` npm പാക്കേജ് നിഷേധിക്കപ്പെട്ടു, അത് [`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 output സ്കീമ ഉപയോഗിച്ച് കോൾ ചെയ്തവർ അപ്ഡേറ്റ് ചെയ്യുക; പാശ്വസാന്ഗീക വെറുപ്പുകൾ ഇല്ല.\n- ടെസ്റ്റുകളും ലിന്റുകളും നടത്തുക; മൈഗ്രേഷൻ കൊണ്ടുവരുന്ന ലഘുവായ പിശകുകൾ പരിഹരിക്കുക.\n- ചെറിയ, അവലോകനയോഗ്യമായ മാറ്റ സെറ്റുകൾ തയ്യാറാക്കുക; ഡിഫുകൾ സഹിതം അവസാന സംഗ്രഹം നൽകുക (കമ്മിറ്റ് ചെയ്യേണ്ടതില്ല).\n\n---\n\n## ഗാർഡ്റെയിൽസ്\n\n- ഗിറ്റ് വർക്ക്‌സ്‌പേസിനുള്ളിലുള്ള ഫയലുകൾ മാത്രമേ മാറ്റുക. പുറത്തുപോവാതെ എഴുതരുത്.\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- `openai>=1.108.1` `requirements.txt` അല്ലെങ്കിൽ `pyproject.toml`-ൽ ഉറപ്പാക്കുക.\n\n### പരിസ്ഥിതി വ്യത്യാസം മൈഗ്രേഷൻ\n\n| പഴയ env var | നടപടി | കുറിപ്പുകൾ |\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` | **തനിക്കാവശ്യമാണ്** | കീ അടിസ്ഥാനAuth-ഇക്കായി `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# പഴയ ആസ്യൂർ ക്ലയന്റ് കന്സ്ട്രക്ടേഴ്സ് (മാറ്റേണ്ടത്)\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 മോഡൽ എൻഡ്‌പോയിന്റ്‌സ് (ഒഴിവാക്കണം — 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 എൻഡ്‌പോയിന്റിലേക്ക് Raw HTTP കോൾസ് (URL പുതുക്കണം)\nrg \"\u002Fopenai\u002Fdeployments\u002F.*\u002Fchat\u002Fcompletions\"\nrg \"api-version=\"\n```\n\n### ഹ്യൂറിസ്റ്റിക്കുകൾ (കണ്ടെടുത്ത് പുനഃരൂപപ്പെടുത്തുക)\n\n- **ചാറ്റ് പൂർത്തീകരണ ക്ലയന്റ്**: `client.chat.completions.create` → `client.responses.create(...)`.\n\n- **അസ്യൂർ ക്ലയന്റ് കൺസ്ട്രക്ടറുകൾ**: `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\", ...}` ഇനങ്ങളാക്കി മാറ്റുക. ഐഡികൾ `fc_` നാല് തുടക്കം വയ്ക്കണം.\n- **`pydantic_function_tool()`**: ഈ ഹെൽപ്പർ ഇപ്പോഴും പഴയ നസ്റ്റെഡ് ഫോർമാറ്റ് സൃഷ്ടിക്കുന്നതിനാൽ `responses.create()` യുമായി **അന്വയം ഇല്ല**. മാനുവൽ ടൂൾ നിർവചനങ്ങളോ ഫ്‌ളാറ്റനിങ്ങ് റാപ്പറോ ഉപയോഗിക്കുക.\n- **മൾട്ടി-ടേൺ**: ആപ്പിൽ സംഭാഷണ ചരിത്രം സൂക്ഷിക്കുക; മുൻ ടേൺ `input` ഇനങ്ങൾ വഴി പാസ്സ് ചെയ്യുക.\n- **ഫോർമാറ്റിംഗ്**: ചാറ്റിന്റെ ടോപ്പ്-ലെവൽ `response_format` Responses ൽ `text.format` ആയി മാറ്റുക. കാനോണിക്കൽ രൂപം: `text={\"format\": {\"type\": \"json_schema\", \"name\": \"Output\", \"strict\": True, \"schema\": {...}}}`.\n- **ഉള്ളടക്ക ഇനങ്ങൾ**: ചാറ്റ് `content[].type: \"text\"` Responses ൽ `content[].type: \"input_text\"` ആക്കി മാറ്റുക (ഉപയോക്താവ്\u002Fസിസ്റ്റം ടേണുകൾക്കായി).\n- **ഇമേജ് ഉള്ളടക്കം ഇനങ്ങൾ**: ചാറ്റ് `content[].type: \"image_url\"` Responses ൽ `content[].type: \"input_image\"` ആക്കി മാറ്റുക. `image_url` ഫീൽഡ് നസ്റ്റെഡ് ഒബ്‌ജക്റ്റ് `{\"url\": \"...\"}` നിന്ന് ഫ്‌ളാറ്റ് സ്ട്രിങ്ങാക്കി മാറ്റുന്നു. മുൻപ്\u002Fശേഷം ഉദാഹരണങ്ങൾക്ക് ചീറ്റ്ഷീറ്റ് കാണുക.\n- **റീസണിംഗ് ശ്രമം**: **മൂല കോഡിൽ ഇതിനകം `reasoning` ഉണ്ടെങ്കിൽ മാത്രം മൈഗ്രേറ്റ് ചെയ്യുക**.\n- **ഉള്ളടക്ക ഫിൽട്ടർ പിശക് കൈകാര്യം**: പിശക് ബോഡി ഘടന മാറി. ചാറ്റ് കോംപ്ലിഷൻസ് ഒരു ഏകമായ `error.body[\"innererror\"][\"content_filter_result\"]` ഉപയോഗിച്ചിരുന്നപ്പോൾ; Responses API ൽ `error.body[\"content_filters\"][0][\"content_filter_results\"]` (പലവുമുള്ള, ഒരു അറേയിലുള്ളത്) ആയി മാറി. `innererror` ആക്സസ് ചെയ്യുന്ന കോഡ് `KeyError` ഉയർത്തും. പുതിയ പാത്ത് ഉപയോഗിച്ച് പുനഃരചിക്കുക.\n- **റോ ഹ്ട്ട്പ് കോൾസ്**: ആപ്പ് എഴുതി നേരിട്ടു അസ്യൂർ 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### മൈഗ്രേഷൻ കുറിപ്പുകൾ (ചാറ്റ് കോംപ്ലിഷൻസ് →_RESPONSES_)\n\n- **എന്തുകൊണ്ട് മൈഗ്രേറ്റ് ചെയ്യണം**: ടെക്സ്‌റ്റ്, ടൂളുകൾ, സ്റ്റ്രീമിംഗ് എന്നിവയ്ക്കുള്ള ഏകീകൃത API ആണ് Responses; ചാറ്റ് കോംപ്ലിഷൻസ് പഴയതാണ്. GPT-5-ന് മികച്ച പ്രകടനത്തിന് Responses അനിവാര്യമാണ്.\n- **HTTP**: അസ്യൂർ എന്റ്പോയിന്റ് `\u002Fopenai\u002Fdeployments\u002F{name}\u002Fchat\u002Fcompletions` നിന്ന് `\u002Fopenai\u002Fv1\u002Fresponses` ആയി മാറുന്നു.\n- **ഫീൽഡുകൾ**: `messages` → `input`, `max_tokens` → `max_output_tokens`. `temperature` മാറ്റമില്ല.\n- **ഫോർമാറ്റിംഗ്**: `response_format` → `text.format` ഒരു ശരിയായ ഒബ്ജക്റ്റ് ആയി.\n- **ഉള്ളടക്ക ഇനങ്ങൾ**: ചാറ്റ് `content[].type: \"text\"` Responses ൽ `content[].type: \"input_text\"` ആക്കി മാറ്റുക (സിസ്റ്റം\u002Fഉപയോക്താവ് ടേണുകൾക്ക്).\n- **ഇമേജ് ഉള്ളടക്ക ഇനങ്ങൾ**: ചാറ്റ് `content[].type: \"image_url\"` Responses ൽ `content[].type: \"input_image\"` ആക്കി മാറ്റുക. `image_url` ഫീൽഡ് ഡാറ്റാ ഫ്രോം `{\"image_url\": {\"url\": \"...\"}}` → `{\"image_url\": \"...\"}` (സാധാരണ സ്ട്രിംഗ് — HTTPS URL അല്ലെങ്കിൽ `data:image\u002F...;base64,...` ഡാറ്റാ യു ആർ ഐ).\n\n### പാരാമീറ്റർ മാപ്പിംഗ് റഫറൻസ്\n\n| ചാറ്റ് കോംപ്ലിഷൻസ് | 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- മുൻ സന്ദേശ ഐഡികളിലും സെർവർ സൂക്ഷിക്കുന്ന സാഹചര്യത്തിലും ആശ്രയിക്കരുത്; സ്ഥിതി ക്ലയന്റ് നിയന്ത്രിക്കുന്നതായിരിക്കണം, മेटാഡേറ്റ കുറയ്ക്കുക.\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 മോഡൽ കോഡ് പാതകൾ നീക്കം ചെയ്തു.\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` ൽ; ഡിപെൻഡൻസികൾ പുനഃസ്ഥാപിച്ചു.\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` സീറോ പൊരുത്തങ്ങൾ — അസ്യൂർ-നിർദ്ദിഷ്ട ഫിൽട്ടർ മോക്സ് നീക്കംചെയ്തു.\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- [ ] **സ്റ്റ്രീം പാരിറ്റി**: ഒറിജിനൽ കോഡ് streaming ഉപയോഗിച്ചിരുന്നെങ്കിൽ, മാറ്റിയ കോഡ് സ്റ്റ്രീം ചെയ്ത് ശൂന്യമല്ലാത്ത ഡെൽറ്റകളുമായി `response.output_text.delta` ഇവന്റുകൾ നൽകണം.\n- [ ] **ഘടനാപരമായ ഔട്ട്‌പുട്ട്**: `text.format` `json_schema` ഉപയോഗിച്ച് വിനിയോഗിച്ചാൽ, `json.loads(resp.output_text)` വിജയം ആകും, സ്കീമയുമായി പൊരുത്തപ്പെടും.\n- [ ] **ടൂൾ-കോൾ ലൂപ്പ്**: ടൂളുകൾ ഉപയോഗിക്കുന്നുവെങ്കിൽ, മോഡൽ ടൂൾ ചൊല്ലുകൾ പുറത്തിറക്കും, ആപ്പ് അവ നടപ്പിലാക്കും, പിന്നാലെ ഫോലോ-അപ്പ് അഭ്യർത്ഥന അന്തിമ `output_text` നൽകും (അനന്ത ലൂപ്പ് ഇല്ല).\n- [ ] **Async പാരിറ്റി**: `AsyncAzureOpenAI` ഉപയോഗിച്ചിരുന്നെങ്കിൽ, `AsyncOpenAI` തുല്യമായി `await` ഉപയോഗിച്ച് പ്രവർത്തിക്കും.\n- [ ] **പിശക് നിരക്ക്**: മൈഗ്രേഷനു മുമ്പുള്ള അടിസ്ഥാനരേഖയുമായി താരതമ്യം ചെയ്താൽ 400\u002F401\u002F404 പുതിയ പിശകുകൾ ഇല്ല.\n\n### ഡെലിവറബിൾസുകൾ\n\n- സംഗ്രഹത്തിൽ എഡിറ്റുചെയ്‌ത ഫയലുകൾ, പഴയകേൾ കാൾ സൈറ്റുകളുടെ മുൻപ്\u002Fശേഷം എണ്ണങ്ങൾ, അടുത്ത ഘട്ടങ്ങൾ ഉൾപ്പെടുത്തണം.\n- മാറ്റങ്ങൾ വേർക്കിങ്-ട്രീ എഡിറ്റുകൾ മാത്രം (കമ്മിറ്റുകൾ ഇല്ല).\n\n---\n\n## SDK വേർഷൻ ആവശ്യകതകൾ\n\n| പാക്കേജ് | നെ strings തീർക്കുന്ന വേർഷൻ |\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- [അസ്യൂർ OpenAI സ്റ്റാർട്ടർ കിറ്റ്](https:\u002F\u002Faka.ms\u002Fopenai\u002Fstart)\n- [അസ്യൂർ OpenAI Responses API ഡോക്സ്](https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fai-foundry\u002Fopenai\u002Fhow-to\u002Fresponses)\n- [അസ്യൂർ 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\u002Fml\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\u002Fml\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","参考文档",43145,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fai-agents-for-beginners\u002Fblob\u002Fmain\u002Ftranslations\u002Fml\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",12255,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fai-agents-for-beginners\u002Fblob\u002Fmain\u002Ftranslations\u002Fml\u002F.agents\u002Fskills\u002Fazure-openai-to-responses\u002Freferences\u002Ftest-migration.md",{"path":59,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":60,"sourceHtmlUrl":61},"references\u002Ftroubleshooting.md",32412,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fai-agents-for-beginners\u002Fblob\u002Fmain\u002Ftranslations\u002Fml\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]]