Skip to content

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

2026-07-17: Upgrade agentic knowledge base to GPT-5.4 and default to "minimal" retrieval effort

Choose a tag to compare

@pamelafox pamelafox released this 18 Jul 04:57
8779e85

This release upgrades the agentic knowledge base deployment to GPT-5.4 and changes the default retrieval reasoning effort to minimal, reducing mean retrieval latency by 31% in evaluation while maintaining comparable answer quality.

It also fixes agentic knowledge base creation with cloud ingestion, allowing both features to be enabled simultaneously.

An unrelated fix ensures azd hooks load the intended target environment based on AZURE_ENV_NAME, improving support for coding agents working in parallel on the repository.

What's Changed

Full Changelog: 2026-07-10...2026-07-17

2026-07-10: Migrate to Foundry project, upgrade to gpt-5.4 for evaluation model judge

Choose a tag to compare

@pamelafox pamelafox released this 10 Jul 16:48
138ad3f

This release migrates the app's infrastructure from a classic Azure OpenAI (kind: 'OpenAI') Cognitive Services account to a Microsoft Foundry account and project (kind: 'AIServices'), so models are now deployed inside a real Foundry project that you can open in the new Foundry portal. Evaluations were also upgraded to use the gpt-5.4 model. Stay tuned for a future release that upgrades evaluations to use the new Foundry evaluation SDK.

What's Changed

Full Changelog: 2026-07-09b...2026-07-10

2026-07-09b: Upgrade msal JS packages to 5.x

Choose a tag to compare

@pamelafox pamelafox released this 09 Jul 22:36
0a877c8

This PR upgrades @azure/msal-browser to 5.17, which required adding a dedicated redirect bridge page that calls msal JS functions, and improved EasyAuth integration on the JS side as well.

What's Changed

  • Upgrade msal-browser to 5.17 + msal-react to 5.5 bundled with required popup redirect-bridge scaffolding by Pamela Fox (@pamelafox) in #3148

Full Changelog: 2026-07-09...2026-07-09b

2026-07-09: Drop Node 20, upgrade to Vite 8, and harden auth

Choose a tag to compare

@pamelafox pamelafox released this 09 Jul 20:29
ffa9e6b

This release drops support for Node 20 (now EOL) and moves the frontend build to Vite 8 with esbuild 0.27, so a Node 22+ toolchain is now required for local development and CI.

It also brings several authentication reliability fixes: secrets are now regenerated when Entra app registrations are recreated after manual deletion (#3141), and the /auth_setup fetch now handles the Easy Auth redirect to avoid CORS errors after logout (#3144).

This release also includes an upgrade to azure-search-documents 12.1.0b1 (#3137), a fix for main.bicep to improve compatibility with Bicep language version 2.0 (#3147), and routine dependency bumps across the Python backend and frontend.

What's Changed

Full Changelog: 2026-07-07...2026-07-09

2026-07-07: Bug fixes: Chromium 150 chat crash and CSV OOM

Choose a tag to compare

@pamelafox pamelafox released this 08 Jul 05:30
8fa31ad

A recent Chromium release caused a bug in the chat interface, affecting users of both Chrome and Edge browsers. If this is affecting your app, bring in the fix from #3134

What's Changed

New Contributors

Full Changelog: 2026-06-11...2026-07-07

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

Choose a tag to compare

@pamelafox pamelafox released this 11 Jun 18:45
76280f4

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

New Contributors

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

2026-04-10: Migrate to OpenAI Responses API

Choose a tag to compare

@pamelafox pamelafox released this 10 Apr 20:05
3f4f43a

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

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

Choose a tag to compare

@pamelafox pamelafox released this 06 Feb 17:01
fd6853c

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

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

ACL support for cloud ingestion pipeline

Choose a tag to compare

@pamelafox pamelafox released this 27 Jan 18:11
2e8185b

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

Choose a tag to compare

@pamelafox pamelafox released this 27 Jan 07:23
8292fbe

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