Skip to content

Releases: Azure-Samples/azure-search-openai-demo

2026-06-11: Upgrade default chat model to gpt-5.4-mini

11 Jun 18:45
76280f4

Choose a tag to compare

The app now defaults to gpt-5.4-mini for chat with reasoning_effort=low and top=5, replacing gpt-4.1-mini as the default deployment path for new environments. This is aimed at a better speed/quality balance while maintaining strong grounding and citation behavior.

Why this default

We ran evaluations on our sample data, and this combination had the best metrics of the models and settings we tried. We also looked at the full gpt-5.4 model, other reasoning efforts levels, and other values for top. The metrics are slightly lower than gpt-4.1-mini in some cases, but that difference seems fairly dependent on the sample data used. As always, we encourage you to run your own evaluations on your domain data.

Screenshot 2026-06-09 at 10 26 29 PM

How to customize

You can still modify the app to use different models and settings, per the documentation.

What's changed

  • Bump pillow from 12.1.1 to 12.2.0 in /app/backend by @dependabot[bot] in #3037
  • Bump actions/github-script from 8 to 9 in the github-actions group by @dependabot[bot] in #3036
  • Bump the pallets group with 2 updates by @dependabot[bot] in #3035
  • Bump react-helmet-async from 2.0.5 to 3.0.0 in /app/frontend by @dependabot[bot] in #3034
  • Bump dompurify and @types/dompurify in /app/frontend by @dependabot[bot] in #3033
  • Bump the pydantic group with 2 updates by @dependabot[bot] in #3032
  • Bump pypdf from 6.9.2 to 6.10.0 in /app/backend by @dependabot[bot] in #3031
  • Bump pypdf from 6.10.0 to 6.10.1 in /app/backend by @dependabot[bot] in #3039
  • Bump dompurify from 3.3.3 to 3.4.0 in /app/frontend by @dependabot[bot] in #3040
  • Bump pypdf from 6.10.1 to 6.10.2 in /app/backend by @dependabot[bot] in #3041
  • Bump python-dotenv from 1.1.1 to 1.2.2 in /app/backend by @dependabot[bot] in #3048
  • Remove PR evaluation workflow by @pamelafox in #3062
  • fix(i18n): remove stale keys from non-EN locales by @jluocsa in #3065
  • Upgrade eval model from gpt-4o to gpt-4.1 by @pamelafox in #3066
  • Bump postcss from 8.5.6 to 8.5.15 in /app/frontend by @dependabot[bot] in #3063
  • Bump idna from 3.10 to 3.15 in /app/backend by @dependabot[bot] in #3061
  • Bump langchain from 0.3.17 to 0.3.30 in /evals by @dependabot[bot] in #3059
  • Bump urllib3 from 2.6.3 to 2.7.0 in /app/backend by @dependabot[bot] in #3058
  • Bump microsoft-kiota-http from 1.9.3 to 1.9.9 in /app/backend by @dependabot[bot] in #3056
  • Bump i18next-http-backend from 3.0.1 to 3.0.5 in /app/frontend by @dependabot[bot] in #3049
  • Bump azure-core from 1.38.0 to 1.39.0 by @dependabot[bot] in #3046
  • Bump Azure/setup-azd from 2.2.1 to 2.3.0 in the github-actions group across 1 directory by @dependabot[bot] in #3045
  • Bump i18next-browser-languagedetector from 8.0.2 to 8.2.1 in /app/frontend by @dependabot[bot] in #3043
  • Bump the pydantic group across 1 directory with 2 updates by @dependabot[bot] in #3044
  • Bump react-router-dom from 7.13.1 to 7.16.0 in /app/frontend by @dependabot[bot] in #3076
  • Bump click from 8.3.2 to 8.4.1 in the pallets group by @dependabot[bot] in #3075
  • Fix locale key parity: remove stale i18n keys and add guard test by @jluocsa in #3067
  • Bump typescript from 5.6.3 to 6.0.3 in /app/frontend by @dependabot[bot] in #3073
  • Bump aiohttp from 3.13.4 to 3.14.0 in /app/backend by @dependabot[bot] in #3077
  • Fix pydantic-core Dependabot update by restoring compatible pin and preventing failing pydantic bumps by @dependabot[bot] in #3074
  • Bump pymupdf from 1.26.0 to 1.27.2.3 by @dependabot[bot] in #3078
  • Bump idb from 8.0.0 to 8.0.3 in /app/frontend by @dependabot[bot] in #3081
  • Remove prettier from pre-commit hooks by @pamelafox in #3082
  • Surface ACL authorization forwarding in Thought Process (#2872) by @jluocsa in #3071
  • Bump requests from 2.33.0 to 2.34.2 by @dependabot[bot] in #3086
  • Bump vite from 6.4.2 to 6.4.3 in /app/frontend by @dependabot[bot] in #3085
  • Upgrade default chat model to gpt-5.4-mini with reasoning=low and top=5 by @pamelafox in #3038

New Contributors

Full Changelog: 2026-04-10...2026-06-11

2026-04-10: Migrate to OpenAI Responses API

10 Apr 20:05
3f4f43a

Choose a tag to compare

This release migrates the entire application from the OpenAI Chat Completions API to the Responses API, and updates the backend-frontend wire protocol to match the new API shape. The Responses API is OpenAI's recommended API for all new projects, offering better reasoning model performance, lower costs through improved cache utilization, easy access to built-in tools like code_interpreter (which we will add support as optional features in the future). See the OpenAI responses migration guide for full details.

⚠️ Breaking change: Wire protocol updated

IMPORTANT: The HTTP contract between the frontend and backend has changed. If you have a custom frontend or any client that talks to the /chat or /chat/stream endpoints, you must update it.

Non-streaming responses: The message object (with content, role, tool_calls) has been replaced by a top-level output_text string.

Before:

{"message": {"content": "Answer text...", "role": "assistant"}, "context": {...}}

After:

{"output_text": "Answer text...", "context": {...}}

Streaming responses: The delta object has been replaced by typed events matching the Responses API streaming format.

Before:

{"delta": {"role": "assistant"}, "context": {...}}
{"delta": {"content": "The"}}

After:

{"type": "response.context", "context": {...}}
{"type": "response.output_text.delta", "delta": "The"}

See the updated HTTP Protocol docs for full details.

Main changes made for Responses API migration

Backend

  • All chat.completions.create calls replaced with responses.create
  • Message format changed from messages list to input (using EasyInputMessageParam)
  • Parameters updated: max_tokensmax_output_tokens, seed removed, store=False added

Frontend

  • Answer parser updated for Responses API shaped server outputs
  • Seed setting removed from Developer Settings (not supported by Responses API)
  • Temperature field hidden when a reasoning model is deployed

Model support

  • GPT-5.x family support with prefix-based detection (model.startswith("gpt-5"))
  • Dynamic reasoning effort options based on model version (low/medium/high/xhigh)
  • Reasoning effort options sent via /config endpoint, rendered dynamically in UI

Documentation

  • http_protocol.md rewritten for Responses API wire format
  • "ChatCompletion" references updated across customization.md, reasoning.md, multimodal.md, deploy_features.md, and other_samples.md

All PRs merged since last release

  • Remove unused --skipblobs argument from prepdocs.py by @pamelafox in #2942
  • Upgrade telemetry packages using uv pip compile by @Copilot in #2941
  • Bump frozenlist from 1.4.1 to 1.8.0 by @dependabot[bot] in #2947
  • Upgrade React from 18 to 19 by @pamelafox in #2960
  • Fix ty type checker failures in nightly jobs by @Copilot in #2982
  • Upgrade to fluent ui 9 by @chuwik in #2983
  • Fix ty nightly type error and pin ty to 0.0.21 by @Copilot in #2998
  • Bump dompurify from 3.2.4 to 3.3.2 in /app/frontend by @dependabot[bot] in #3000
  • Bump actions/upload-artifact from 6 to 7 in the github-actions group by @dependabot[bot] in #2991
  • Bump rollup from 4.46.1 to 4.59.0 in /app/frontend by @dependabot[bot] in #2989
  • Bump pillow from 12.0.0 to 12.1.1 in /app/backend by @dependabot[bot] in #2973
  • Bump cryptography from 44.0.1 to 46.0.5 in /app/backend by @dependabot[bot] in #2972
  • Bump std-uritemplate from 2.0.5 to 2.0.8 by @dependabot[bot] in #2968
  • Bump pypdf from 6.6.2 to 6.8.0 in /app/backend by @dependabot[bot] in #2999
  • Bump flask from 3.1.2 to 3.1.3 in /app/backend by @dependabot[bot] in #2977
  • Bump werkzeug from 3.1.5 to 3.1.6 in /app/backend by @dependabot[bot] in #2976
  • Fix: Improve re-deploy idempotency for role assignments and Cognitive Services by @haileyhuber8 in #3009
  • Bump cryptography from 46.0.5 to 46.0.6 in /app/backend by @dependabot[bot] in #3016
  • Bump pyjwt from 2.11.0 to 2.12.0 in /app/backend by @dependabot[bot] in #3015
  • Bump requests from 2.32.4 to 2.33.0 in /app/backend by @dependabot[bot] in #3014
  • Bump picomatch in /app/frontend by @dependabot[bot] in #3013
  • Bump pypdf from 6.8.0 to 6.9.2 in /app/backend by @dependabot[bot] in #3012
  • Bump azure/login from 2 to 3 in the github-actions group by @dependabot[bot] in #3011
  • fix: make Cognitive Services restore a configurable parameter by @pamelafox in #3017
  • Bump @fluentui/react-components from 9.73.1 to 9.73.3 in /app/frontend by @dependabot[bot] in #3004
  • Bump react-router-dom from 7.12.0 to 7.13.1 in /app/frontend by @dependabot[bot] in #3002
  • Bump pygments from 2.19.2 to 2.20.0 in /app/backend by @dependabot[bot] in #3022
  • Bump the github-actions group with 2 updates by @dependabot[bot] in #3019
  • Bump react-syntax-highlighter from 16.1.0 to 16.1.1 in /app/frontend by @dependabot[bot] in #3020
  • Use conditional deployment for cloud ingestion functions in azure.yaml by @pamelafox in #3021
  • Fix data ingestion 400 error when text tokens exceed embedding batch limit by @pamelafox in #3025
  • Bump vite from 6.4.1 to 6.4.2 in /app/frontend by @dependabot[bot] in #3026
  • Bump @fluentui/react-table from 9.19.11 to 9.19.14 in /app/frontend by @dependabot[bot] in #3024
  • Bump aiohttp from 3.13.3 to 3.13.4 in /app/backend by @dependabot[bot] in #3023
  • Bump prettier from 3.3.3 to 3.8.1 in /app/frontend by @dependabot[bot] in #3018
  • Bump tenacity from 9.1.2 to 9.1.4 by @dependabot[bot] in #2970
  • Bump cryptography from 46.0.6 to 46.0.7 in /app/backend by @dependabot[bot] in #3027
  • Migrate from Chat Completions to Responses API by @pamelafox in #3028
  • Update backend-frontend contract to Responses API shape by @pamelafox in #3029

New Contributors

  • @haileyhuber8 made their first contribution in #3009

Full Changelog: 2026-02-06...2026-04-10

2026-02-06: Port from Prompty to Jinja2 for prompt templating

06 Feb 17:01
fd6853c

Choose a tag to compare

We were previously using Prompty for prompt templating. We have moved from Prompty to Jinja2 since we are preparing to move from Chat Completions to Responses (which Prompty does not support), plus Prompty did not achieve wide community adoption. Jinja2 is a widely supported templating framework, and Prompty was based off Jinja2, so the prompt templates look similar. However, we are only using Jinja2 to template individual messages, not the entire conversation like before.

What's Changed

  • Fix multimodal image download from non-default blob container by @pamelafox in #2951
  • Bump certifi from 2024.7.4 to 2026.1.4 by @dependabot[bot] in #2949
  • Bump pyjwt from 2.10.1 to 2.11.0 by @dependabot[bot] in #2948
  • Revert Yarn GPG workaround and use built-in devcontainer image by @Copilot in #2956
  • Fix ty type checker errors breaking nightly jobs by @Copilot in #2958
  • Migrate from Prompty to Jinja2 for prompt templates by @pamelafox in #2953

Full Changelog: 2026-01-27...2026-02-06

ACL support for cloud ingestion pipeline

27 Jan 18:11
2e8185b

Choose a tag to compare

This release adds Access Control List (ACL) support for the cloud ingestion pipeline, enabling document-level security filtering in Azure AI Search. Documents stored in Azure Data Lake Storage Gen2 can now have their ACLs automatically extracted during indexing.

Screenshot 2026-01-27 at 10 48 43 AM

⚠️ Breaking change: ADLS local file strategy removed

IMPORTANT: The previous "ADLS local file strategy" (using prepdocs directly against Azure Data Lake Storage) has been deprecated and removed. If you were using that approach in earlier versions of this sample, you must migrate to the cloud ingestion flow described in Cloud ingestion with Azure Data Lake Storage Gen2, which runs ingestion in Azure Functions and the Azure AI Search indexer instead of on the client machine.

How it works

Cloud ingestion with ACLs

  • Automatic ACL extraction from ADLS Gen2 files during indexing
  • Extracts user IDs (oids) and group IDs (groups) with read permission
  • Supports global document access via the ADLS "other" ACL entry when AZURE_ENABLE_GLOBAL_DOCUMENT_ACCESS=true
  • Indexes document chunks in Azure AI Search with oids and groups fields

Bring Your Own (BYO) ADLS Storage Account

  • Use an existing ADLS Gen2 account instead of provisioning a new one
  • Support for ADLS accounts in different resource groups
  • Automatic RBAC role assignment at the storage account level

New environment variables

Variable Description
USE_CLOUD_INGESTION_ACLS Enable ACL extraction from ADLS Gen2 (requires USE_CLOUD_INGESTION=true)
USE_EXISTING_ADLS_STORAGE Use an existing ADLS account instead of provisioning a new one
AZURE_ADLS_GEN2_STORAGE_ACCOUNT Name of the ADLS storage account (required when USE_EXISTING_ADLS_STORAGE=true)
AZURE_ADLS_GEN2_STORAGE_RESOURCE_GROUP Resource group for BYO ADLS (optional, defaults to main resource group)

Migration guide

If you were previously using the ADLS local file strategy:

  1. Set USE_CLOUD_INGESTION=true and USE_CLOUD_INGESTION_ACLS=true
  2. Un-comment the function lines in azure.yaml.
  3. Run azd up to deploy the cloud ingestion Azure Functions
  4. Upload documents to the ADLS storage account (check AZURE_ADLS_STORAGE_ACCOUNT output)
  5. Set ACLs on files using Azure Storage Explorer
  6. Run setup_cloud_ingestion.sh to trigger the indexer
  7. Run scripts/verify_search_index_acls.py to verify ACL filtering is working correctly.

See the updated login_and_acl.md for complete setup instructions.

What's changed

Full Changelog: 2026-01-26...2026-01-27

2026-01-26: "Stop" button in chat frontend

27 Jan 07:23
8292fbe

Choose a tag to compare

This release includes these two changes to the frontend:

  1. Stop button for streaming responses (#2909) - Users can now cancel AI responses mid-generation using a new stop button. Helpful when the response isn't useful or you want to ask a different question.
  2. No more chat input length limit (#2908) - Removed the frontend 1000-character cap on chat input. The text area now auto-grows and scrolls, letting users paste long prompts. Backend context window errors are properly surfaced if limits are reached.

This release makes one bug fix for developers using manageacl.py:

  • ACL management permissions fix (#2912) - Fixed manageacl.py to use x-ms-enable-elevated-read header when querying documents, allowing the script to see documents without ACLs yet.

This release includes these improvements to development tools used with the repo:

  • Migrated from mypy to ty type checker (#2911) - upgraded to the much faster type checker.
  • Updated chat agents configuration (#2907) - Ported VS Code chat modes to the new chat agents format.
  • DevContainer fix (#2931) - Removed Yarn repo with expired GPG key that was breaking devcontainer builds for GitHub Codespaces.

Many packages were also upgraded, per the PRs below.

What's Changed

Full Changelog: 2026-01-12...2026-01-26

2026-01-12: Deprecation of "Ask" tab

12 Jan 17:19
9188793

Choose a tag to compare

Since the beginning of this repo, we've always had two tabs, "Chat" and "Ask". The "Chat" tab was always the most popular, since it allowed for multi-turn conversations. Since the existence of the two tabs greatly complicated the code and many developers deleted the "Ask" tab in their forks, we decided to deprecate the "Ask" tab entirely. This will allow us to focus more on the code that everyone is using.

Note that currently there's still a class hierarchy in the backend code of Approach -> ChatReadRetrieveApproach. We may decide to flatten that hierarchy since there's only sone subclass of Approach now, but that is a larger change, so if we do that, it will be a separate change.

What's Changed

Full Changelog: 2026-01-09...2026-01-12

2026-01-09: Bug fixes and dependency updates

10 Jan 06:48
7a1b6ea

Choose a tag to compare

This release includes several bug fixes and improvements. Key fixes address issues with the web knowledge source (removing unsupported snippet and description fields), the VS Code debug launch configuration on Windows, and role assignments for the free Azure Search SKU. Infrastructure improvements include resolving all Bicep warnings, increasing embedding TPM capacity for cloud ingestion, and changing cloud ingestion to download blobs based on path rather than file data.

The release also includes multiple dependency updates for both backend (aiohttp, werkzeug, pypdf, urllib3) and frontend (react-router-dom) packages, along with documentation updates and a new VS Code for the Web badge in the README.

What's Changed

  • Remove snippet from WebResult since the web source does not provide it by @pamelafox in #2843
  • Remove description from web knowledge source by @pamelafox in #2844
  • Bump the github-actions group with 2 updates by @dependabot[bot] in #2839
  • Increase embedding TPM capacity and add note in cloud ingestion guide by @pamelafox in #2846
  • Update setup instructions in login_and_acl.md by @pamelafox in #2851
  • Resolve all Bicep warnings by @pamelafox in #2854
  • Change cloud ingestion to download blobs based off path versus file data by @pamelafox in #2858
  • Fix last exit code issue by @mattgotteiner in #2873
  • Bump the github-actions group with 2 updates by @dependabot[bot] in #2874
  • Skip role assignments for free Azure Search SKU (#2848) by @bnodir in #2886
  • Restore azure-functions dependency for Azure Functions apps by @pamelafox in #2896
  • Fix VS Code debug launch configuration for Windows by @bf-2026 in #2884
  • Bump aiohttp from 3.12.14 to 3.13.3 in /app/backend by @dependabot[bot] in #2887
  • Bump werkzeug from 3.1.3 to 3.1.5 in /app/backend by @dependabot[bot] in #2890
  • Bump pypdf from 6.1.3 to 6.6.0 in /app/backend by @dependabot[bot] in #2894
  • Bump urllib3 from 2.5.0 to 2.6.3 in /app/backend by @dependabot[bot] in #2888
  • Bump types-html5lib from 1.1.11.20241018 to 1.1.11.20251014 by @dependabot[bot] in #2815
  • Bump isodate from 0.6.1 to 0.7.2 by @dependabot[bot] in #2814
  • Bump zipp from 3.21.0 to 3.23.0 by @dependabot[bot] in #2813
  • Bump mdast-util-to-hast from 13.2.0 to 13.2.1 in /app/frontend by @dependabot[bot] in #2852
  • Bump react-router-dom from 6.28.0 to 7.9.5 in /app/frontend by @dependabot[bot] in #2812
  • Bump react-router and react-router-dom in /app/frontend by @dependabot[bot] in #2897
  • Add VS Code for the Web badge to README by @Copilot in #2871

New Contributors

Full Changelog: 2025-11-18...2026-01-09

2025-11-18: Agentic knowledge base with Bing + SharePoint options

18 Nov 19:30
09dd0ef

Choose a tag to compare

This release upgrades the agentic retrieval feature to use Azure AI Search's new Knowledge Base functionality, which provides enhanced intelligent document retrieval with configurable reasoning levels and support for multiple knowledge sources including web and SharePoint.

Screenshot 2025-11-18 at 11 27 41 AM

Knowledge Base changes

  • Upgraded from Knowledge Agent to Knowledge Base: The feature now uses the new KnowledgeBaseRetrievalClient from Azure AI Search, replacing the legacy KnowledgeAgentRetrievalClient
  • Added multiple reasoning level options: Choose between minimal, low, or medium reasoning effort for retrieval
    • Minimal: Most similar to current search() call, where we bring our own query planning to generate a single query
    • Low: Adds a query planning step that's built into AI Search and can suggest multiple queries for complex queries
    • Medium: Adds an optional iteration step if an AI Search model determines results aren't good enough

The feature supports three kinds of sources:

  • Search Index (default): Searches documents in your Azure AI Search index. We currently only support one index, but you can modify the code to bring in additional indices if desired. We may add a YAML config for multiple indices in future.
  • Web Source (optional): Enables searching the public web for information
    • ⚠️ Requires answer synthesis mode (disables streaming, follow-up questions, and some LLM customizations)
    • ⚠️ Microsoft Data Protection Addendum doesn't apply to data sent to Web Knowledge Source
  • SharePoint Source (optional): Searches SharePoint documents using on-behalf-of flow
    • Requires authentication to be enabled
    • Requires users to have a Microsoft Copilot license

Environment variable changes

New environment variables for deployment configuration:

  • USE_AGENTIC_KNOWLEDGEBASE: Enable the knowledge base feature (replaces USE_AGENTIC_RETRIEVAL)
  • AZURE_SEARCH_KNOWLEDGEBASE_RETRIEVAL_REASONING_EFFORT: Set default reasoning level (minimal, low, or medium)
  • USE_WEB_SOURCE: Enable web knowledge source
  • USE_SHAREPOINT_SOURCE: Enable SharePoint knowledge source
  • AZURE_OPENAI_KNOWLEDGEBASE_DEPLOYMENT: Specify the deployment for knowledge base
  • AZURE_OPENAI_KNOWLEDGEBASE_MODEL: Specify the model (default: gpt-4.1-mini)
  • AZURE_OPENAI_KNOWLEDGEBASE_MODEL_VERSION: Specify the model version

⚠️ If you were using the previous agentic retrieval feature (USE_AGENTIC_RETRIEVAL), you must change USE_AGENTIC_RETRIEVALUSE_AGENTIC_KNOWLEDGEBASE

UI enhancements

  • Developer settings: New options for toggling sources and changing reasoning level.
Screenshot 2025-11-18 at 11 24 18 AM
  • Thought Process: Now includes:
    • Token usage for the planning process
    • Generated search queries
    • Activity details for each source citation
Screenshot 2025-11-18 at 11 23 03 AM

Documentation

See docs/agentic_retrieval.md for complete deployment and configuration instructions.


All changes included in this release

Full Changelog: 2025-11-12...2025-11-18

2025-11-12: Cloud ingestion pipeline with custom skills (Azure Functions)

12 Nov 19:32
eb4b4e2

Choose a tag to compare

We're excited to announce a new cloud ingestion option that enables scalable, automated document processing using Azure Functions as custom skills within an Azure AI Search indexer pipeline. This repo previously supported an "integrated vectorization" strategy that used built-in skills for document extraction and splitting, but this new approach uses custom skills that use our own approach to document extraction and splitting. You can now use either local ingestion or cloud ingestion and get the same results.

This diagram shows the overall ingestion pipeline:

Screenshot 2025-11-12 at 10 28 17 AM

The indexer uses this skill sequence:

  1. Document Extractor - Parses source documents (PDFs, HTML, Office files, images) and extracts text, tables, and figure metadata
  2. Figure Processor - Enriches figures with AI-generated descriptions, uploads images to Blob Storage, and computes embeddings (when multimodal is enabled)
  3. Shaper Skill - Consolidates enriched data from multiple processing paths into a unified document structure
  4. Text Processor - Merges figures with text, performs sentence-aware chunking, and generates embeddings for vector search

The implementation required significant refactoring to maximize code reuse between local and cloud ingestion:

  • Extracted shared setup logic into servicesetup.py
  • Created standalone modules for figure processing (figureprocessor.py) and text processing (textprocessor.py)
  • Bicep templates for Function App deployment with proper authentication

To enable the new feature, see the this guide. Please provide feedback in the issue tracker.

What's Changed

  • Cloud ingestion strategy with prepdocs as custom skillset for Azure AI Search Blob Indexer by @pamelafox in #2819

Full Changelog: 2025-11-03...2025-11-12

2025-11-03: Port from AzureOpenAI to OpenAI constructors

03 Nov 19:44
4d933cc

Choose a tag to compare

Thanks to a recent improvement in the openai Python SDK and changes in the Azure OpenAI endpoint, we can now use OpenAI to connect to AzureOpenAI endpoint. The new Azure OpenAI endpoint is at "/openai/v1/" and does not accept an API version parameter, so we were able to remove the API version parameter entirely from this codebase, and simplify the code to only use the OpenAI() constructor.

If you merge in this change and see an OpenAI connection error locally, please make sure you have upgraded your local openai package version. You must have the version that accepts a token provider callback as the api_key parameter, otherwise you'll get an error about incorrect key/resource.

What's Changed

  • Migrate AzureOpenAI constructors to standard OpenAI client by @Copilot in #2752

Full Changelog: 2025-10-29...2025-11-03