azure-search-openai-demo
A sample app for the Retrieval-Augmented Generation pattern running in Azure, using Azure AI Search for retrieval and Azure OpenAI large language models to power ChatGPT-style and Q&A experiences.
File Explorer
- azure-dev.yml
- devcontainer.json
- fixer.agent.md
- triager.agent.md
- bicep.instructions.md
- azure-dev-validation.yaml
- azure-dev.yml
- evals-test.yaml
- frontend.yaml
- lint-markdown.yml
- nightly-jobs.yaml
- python-test.yaml
- stale-bot.yml
- validate-markdown.yml
- CODE_OF_CONDUCT.md
- dependabot.yaml
- ISSUE_TEMPLATE.md
- PULL_REQUEST_TEMPLATE.md
- extensions.json
- launch.json
- settings.json
- tasks.json
- chat_answer.system.jinja2
- chat_answer.user.jinja2
- chat_query_rewrite_tools.json
- query_rewrite.system.jinja2
- __init__.py
- approach.py
- chatreadretrieveread.py
- promptmanager.py
- __init__.py
- cosmosdb.py
- __init__.py
- authentication.py
- sessionhelper.py
- __init__.py
- blobmanager.py
- cloudingestionstrategy.py
- csvparser.py
- embeddings.py
- figureprocessor.py
- fileprocessor.py
- filestrategy.py
- htmlparser.py
- integratedvectorizerstrategy.py
- jsonparser.py
- Jupiteroid-Regular.ttf
- listfilestrategy.py
- mediadescriber.py
- page.py
- parser.py
- pdfparser.py
- searchmanager.py
- servicesetup.py
- strategy.py
- textparser.py
- textprocessor.py
- textsplitter.py
- .dockerignore
- app.py
- config.py
- custom_uvicorn_worker.py
- decorators.py
- Dockerfile
- error.py
- gunicorn.conf.py
- main.py
- prepdocs.py
- requirements.in
- requirements.txt
- setup_cloud_ingestion.py
- favicon.ico
- api.ts
- index.ts
- models.ts
- applogo.svg
- AgentPlan.tsx
- agentPlanUtils.ts
- AnalysisPanel.module.css
- AnalysisPanel.tsx
- AnalysisPanelTabs.tsx
- index.tsx
- ThoughtProcess.tsx
- TokenUsageGraph.tsx
- Answer.module.css
- Answer.tsx
- AnswerError.tsx
- AnswerIcon.tsx
- AnswerLoading.tsx
- AnswerParser.tsx
- index.ts
- SpeechOutputAzure.tsx
- SpeechOutputBrowser.tsx
- ClearChatButton.module.css
- ClearChatButton.tsx
- index.tsx
- Example.module.css
- Example.tsx
- ExampleList.tsx
- index.tsx
- HelpCallout.tsx
- index.ts
- HistoryButton.module.css
- HistoryButton.tsx
- index.tsx
- HistoryItem.module.css
- HistoryItem.tsx
- index.tsx
- HistoryPanel.module.css
- HistoryPanel.tsx
- index.tsx
- CosmosDB.ts
- HistoryManager.ts
- index.ts
- IndexedDB.ts
- IProvider.ts
- None.ts
- index.tsx
- LoginButton.module.css
- LoginButton.tsx
- index.tsx
- MarkdownViewer.module.css
- MarkdownViewer.tsx
- index.ts
- QuestionInput.module.css
- QuestionInput.tsx
- SpeechInput.tsx
- Settings.module.css
- Settings.tsx
- index.tsx
- SettingsButton.module.css
- SettingsButton.tsx
- index.ts
- SupportingContent.module.css
- SupportingContent.tsx
- SupportingContentParser.ts
- index.tsx
- TokenClaimsDisplay.tsx
- index.tsx
- UploadFile.module.css
- UploadFile.tsx
- index.ts
- UserChatMessage.module.css
- UserChatMessage.tsx
- index.ts
- VectorSettings.module.css
- VectorSettings.tsx
- config.ts
- index.tsx
- LanguagePicker.module.css
- LanguagePicker.tsx
- translation.json
- translation.json
- translation.json
- translation.json
- translation.json
- translation.json
- translation.json
- translation.json
- translation.json
- translation.json
- Chat.module.css
- Chat.tsx
- Layout.module.css
- Layout.tsx
- NoPage.tsx
- authConfig.ts
- index.css
- index.tsx
- layoutWrapper.tsx
- loginContext.tsx
- redirect.ts
- vite-env.d.ts
- .npmrc
- .nvmrc
- .prettierignore
- .prettierrc.json
- index.html
- package-lock.json
- package.json
- redirect.html
- tsconfig.json
- vite.config.ts
- .funcignore
- function_app.py
- host.json
- .funcignore
- function_app.py
- host.json
- .funcignore
- function_app.py
- host.json
- __init__.py
- start.ps1
- start.sh
- 2189.json
- 2190.json
- 2191.json
- 2192.json
- query.json
- Financial Market Analysis Report 2023.pdf
- Benefit_Options.pdf
- employee_handbook.pdf
- Northwind_Health_Plus_Benefits_Details.pdf
- Northwind_Standard_Benefits_Details.pdf
- PerksPlus.pdf
- role_library.pdf
- Zava_Company_Overview.md
- appcomponents.png
- applogincomponents.png
- chathome_mobile.png
- chatscreen.png
- chatscreen_desktop.png
- data_points.png
- dev_settings_tablet.png
- diagram_prepdocs.png
- endpoint.png
- followup.png
- gpt4v.png
- ingestion_pipeline.png
- max-subqueries.png
- multimodal.png
- query-plan.png
- reasoning.png
- screenshot_appinsights_failures.png
- screenshot_appservice_deployment_log.png
- screenshot_appservice_deploymentcenter.png
- screenshot_appservice_dockerlogs.png
- screenshot_appservice_downloadedlogs.png
- screenshot_appservice_logstream.png
- screenshot_appservice_tools.png
- screenshot_locust.png
- screenshot_searchindex.png
- screenshot_searchoptions.png
- thoughts.png
- token-usage.png
- transaction-tracing.png
- agentic_retrieval.md
- appservice.md
- architecture.md
- azd.md
- azure_app_service.md
- azure_container_apps.md
- customization.md
- data_ingestion.md
- deploy_existing.md
- deploy_features.md
- deploy_freetrial.md
- deploy_lowcost.md
- deploy_private.md
- deploy_troubleshooting.md
- evaluation.md
- http_protocol.md
- localdev.md
- login_and_acl.md
- monitoring.md
- multimodal.md
- other_samples.md
- productionizing.md
- README.md
- reasoning.md
- safety_evaluation.md
- sharing_environments.md
- textsplitter.md
- __init__.py
- base_metric.py
- builtin_metrics.py
- code_metrics.py
- __init__.py
- evaluate.py
- __init__.py
- diff_markdown.py
- summary_markdown.py
- utils.py
- __init__.py
- __main__.py
- cli.py
- service_setup.py
- config.json
- eval_results.jsonl
- evaluate_parameters.json
- summary.json
- config.json
- eval_results.jsonl
- evaluate_parameters.json
- summary.json
- config.json
- eval_results.jsonl
- evaluate_parameters.json
- summary.json
- config.json
- eval_results.jsonl
- evaluate_parameters.json
- summary.json
- config.json
- eval_results.jsonl
- evaluate_parameters.json
- README.md
- summary.json
- config.json
- eval_results.jsonl
- evaluate_parameters.json
- summary.json
- config.json
- eval_results.jsonl
- evaluate_parameters.json
- summary.json
- config.json
- eval_results.jsonl
- evaluate_parameters.json
- summary.json
- config.json
- eval_results.jsonl
- evaluate_parameters.json
- summary.json
- config.json
- eval_results.jsonl
- evaluate_parameters.json
- summary.json
- config.json
- eval_results.jsonl
- evaluate_parameters.json
- summary.json
- config.json
- eval_results.jsonl
- evaluate_parameters.json
- summary.json
- config.json
- eval_results.jsonl
- evaluate_parameters.json
- summary.json
- config.json
- eval_results.jsonl
- evaluate_parameters.json
- summary.json
- config.json
- eval_results.jsonl
- evaluate_parameters.json
- summary.json
- config.json
- eval_results.jsonl
- evaluate_parameters.json
- summary.json
- config.json
- eval_results.jsonl
- evaluate_parameters.json
- summary.json
- config.json
- eval_results.jsonl
- evaluate_parameters.json
- summary.json
- config.json
- eval_results.jsonl
- evaluate_parameters.json
- summary.json
- config.json
- eval_results.jsonl
- evaluate_parameters.json
- summary.json
- config.json
- eval_results.jsonl
- evaluate_parameters.json
- summary.json
- config.json
- eval_results.jsonl
- evaluate_parameters.json
- summary.json
- config.json
- eval_results.jsonl
- evaluate_parameters.json
- summary.json
- config.json
- eval_results.jsonl
- evaluate_parameters.json
- summary.json
- config.json
- eval_results.jsonl
- evaluate_parameters.json
- summary.json
- config.json
- eval_results.jsonl
- evaluate_parameters.json
- summary.json
- config.json
- eval_results.jsonl
- evaluate_parameters.json
- summary.json
- config.json
- eval_results.jsonl
- evaluate_parameters.json
- summary.json
- config.json
- eval_results.jsonl
- evaluate_parameters.json
- summary.json
- config.json
- eval_results.jsonl
- evaluate_parameters.json
- summary.json
- config.json
- eval_results.jsonl
- evaluate_parameters.json
- summary.json
- config.json
- eval_results.jsonl
- evaluate_parameters.json
- summary.json
- config.json
- eval_results.jsonl
- evaluate_parameters.json
- summary.json
- config.json
- eval_results.jsonl
- evaluate_parameters.json
- summary.json
- config.json
- eval_results.jsonl
- evaluate_parameters.json
- summary.json
- gpt41mini-vs-gpt54-agentic.json
- gpt41mini-vs-gpt54-agentic.md
- gpt54-agentic-low-vs-minimal-rerun.json
- gpt54-agentic-low-vs-minimal-rerun.md
- gpt54-agentic-low-vs-minimal.json
- gpt54-agentic-low-vs-minimal.md
- gpt54-agentic-vs-baseline.json
- gpt54-agentic-vs-baseline.md
- gpt54-nonagentic-vs-minimal.json
- gpt54-nonagentic-vs-minimal.md
- config.json
- eval_results.jsonl
- evaluate_parameters.json
- summary.json
- config.json
- eval_results.jsonl
- evaluate_parameters.json
- summary.json
- config.json
- eval_results.jsonl
- evaluate_parameters.json
- summary.json
- baseline.json
- baseline.md
- test_evaluate.py
- test_evaluate_metrics.py
- test_review_utils.py
- eval_compare.py
- evaluate_config.json
- evaluate_config_multimodal.json
- generate_ground_truth.py
- ground_truth.jsonl
- ground_truth_kg.json
- ground_truth_multimodal.jsonl
- requirements.txt
- run_evaluate.py
- safety_evaluation.py
- safety_results.json
- functions-app.bicep
- functions-rbac.bicep
- functions.bicep
- storage-containers.bicep
- ai-foundry-project.bicep
- appregistration.bicep
- appservice-appsettings.bicep
- appservice.bicep
- appserviceplan.bicep
- container-app-upsert.bicep
- container-app.bicep
- container-apps-auth.bicep
- container-apps-environment.bicep
- container-apps.bicep
- container-registry.bicep
- monitoring.bicep
- private-dns-zones.bicep
- private-endpoint.bicep
- vnet.bicep
- search-diagnostics.bicep
- search-services.bicep
- aca-identity.bicep
- documentdb-sql-role.bicep
- registry-access.bicep
- role.bicep
- storage-role.bicep
- storage-account.bicep
- abbreviations.json
- backend-dashboard.bicep
- bicepconfig.json
- main.bicep
- main.parameters.json
- main.test.bicep
- network-isolation.bicep
- private-endpoints.bicep
- adlsgen2setup.py
- auth_common.py
- auth_init.ps1
- auth_init.py
- auth_init.sh
- auth_update.ps1
- auth_update.py
- auth_update.sh
- copy_prepdocslib.ps1
- copy_prepdocslib.py
- copy_prepdocslib.sh
- cosmosdb_migration.py
- load-balance-aca-setup.sh
- load_python_env.ps1
- load_python_env.sh
- manage_indexer.py
- manageacl.py
- prepdocs.ps1
- prepdocs.sh
- roles.ps1
- roles.sh
- sampleacls.json
- setup_cloud_ingestion.ps1
- setup_cloud_ingestion.sh
- verify_search_index_acls.py
- result.json
- result.json
- result.json
- result.json
- result.json
- result.json
- result.jsonlines
- result.jsonlines
- result.jsonlines
- result.jsonlines
- result.json
- result.json
- result.json
- result.json
- result.json
- result.json
- result.json
- result.json
- result.json
- result.json
- result.json
- result.json
- result.json
- result.json
- result.jsonlines
- result.jsonlines
- result.json
- result.json
- result.jsonlines
- result.jsonlines
- result.jsonlines
- result.jsonlines
- result.jsonlines
- result.jsonlines
- result.jsonlines
- result.jsonlines
- result.json
- result.json
- result.json
- result.json
- result.json
- result.json
- result.json
- result.json
- result.json
- result.json
- result.json
- result.json
- result.json
- result.json
- result.json
- result.json
- result.json
- result.json
- result.json
- result.json
- result.json
- result.jsonlines
- result.jsonlines
- result.json
- result.jsonlines
- result.jsonlines
- result.json
- result.json
- result.json
- result.json
- result.json
- result.json
- result.json
- result.json
- split_pages_with_figures.json
- split_pages_with_figures.json
- text_splitter_sections.txt
- ar_Tribute to Michael Hart.pdf
- en_An Occurrence at Owl Creek Bridge.pdf
- Financial Market Analysis Report 2023.pdf
- Financial Market Analysis Report 2023_page2_figure.png
- ja_RTL_TopToBottom_Test.pdf
- ja_惡魔.pdf
- ko_도시로 간 쥐.pdf
- pages_with_figures.json
- pages_with_just_text.json
- Simple Figure.pdf
- Simple Figure_content.txt
- Simple Table.pdf
- Simple Table_content.txt
- zh_You Xue Qiong Lin (幼學瓊林).pdf
- __init__.py
- conftest.py
- e2e.py
- image_large.png
- mocks.py
- test_adlsgen2setup.py
- test_agentic_retrieval.py
- test_app.py
- test_app_config.py
- test_auth_init.py
- test_authenticationhelper.py
- test_blob_manager.py
- test_chatapproach.py
- test_content_file.py
- test_cosmosdb.py
- test_cosmosdb_migration.py
- test_csvparser.py
- test_embeddings.py
- test_eval_compare.py
- test_frontend_locales.py
- test_function_apps.py
- test_htmlparser.py
- test_jsonparser.py
- test_listfilestrategy.py
- test_manageacl.py
- test_mediadescriber.py
- test_pdfparser.py
- test_prepdocs.py
- test_prepdocslib_filestrategy.py
- test_prepdocslib_textsplitter.py
- test_searchmanager.py
- test_sentencetextsplitter.py
- test_servicesetup.py
- test_textparser.py
- test_textprocessor.py
- test_upload.py
- .gitattributes
- .gitignore
- .markdownlint-cli2.jsonc
- .pre-commit-config.yaml
- AGENTS.md
- azure.yaml
- CONTRIBUTING.md
- LICENSE
- locustfile.py
- package-lock.json
- ps-rule.yaml
- pyproject.toml
- README.md
- requirements-dev.txt
- SECURITY.md
# Installation Guide
python- Python 3.10+
- Node.js 18+
- Azure Developer CLI (azd)
- Git
Setup Steps
git clone https://github.com/Azure-Samples/azure-search-openai-demo.git
Clone the project source code locally.
azd auth login
Log in to your Azure account using Azure Developer CLI.
azd up
Provision Azure resources and deploy the application.
Video Guides
RAG chat app with Azure OpenAI and Azure AI Search Overview
Key Commands
azd up
Provision Azure resources, build, and deploy all in one command.
pip install -r app/backend/requirements.txt
Install Python package dependencies for the backend.
npm install --prefix app/frontend
Install Node.js package dependencies for the frontend.
# Use via CDN
jsDelivrjsDelivr serves any public GitHub repository as a CDN with zero setup. Pick a version and a file to get a ready-to-paste link and snippet.
Release Timeline
Actively Maintained- 2026-07-18 2026-07-17: Upgrade agentic knowledge base to GPT-5.4 and default to "minimal" retrieval effort
- 2026-07-10 2026-07-10: Migrate to Foundry project, upgrade to gpt-5.4 for evaluation model judge
- 2026-07-09 2026-07-09b: Upgrade msal JS packages to 5.x
- 2026-07-09 2026-07-09: Drop Node 20, upgrade to Vite 8, and harden auth
- 2026-07-08 2026-07-07: Bug fixes: Chromium 150 chat crash and CSV OOM
- 2026-06-11 2026-06-11: Upgrade default chat model to gpt-5.4-mini
- 2026-04-10 2026-04-10: Migrate to OpenAI Responses API
- 2026-02-06 2026-02-06: Port from Prompty to Jinja2 for prompt templating
- 2026-01-27 ACL support for cloud ingestion pipeline
- 2026-01-27 2026-01-26: "Stop" button in chat frontend
Command Glossary
Commands referenced in this DOCs, explained below.
python
View Details ▼
python
Python language interpreter.
python
Start a REPL (interactive shell):
python {{path/to/file.py}}
Execute a specific Python file:
python -i {{path/to/file.py}}
Execute a specific Python file and start a REPL:
python3
View Details ▼
python3
This command is an alias of `python`.
tldr python
View documentation for the original command:
apt install
View Details ▼
apt install
Install packages for Debian-based distributions.
sudo apt install {{package}}
Install a package, or update it to the latest version:
sudo apt install {{[-V|--verbose-versions]}} {{package}}
Display verbose package version information during installation or update:
