Skip to content

Commit 09dd0ef

Browse files
Add Knowledge Base support (#2835)
* Update all the tests * Sharepoint results and some TODOs * update package version * hide retireval count on agentic * new ux * disable minimal on web * refactor query rewriting * disable streaming on frontend if retrieval reasoning toggled * minimal supports answerings * default retrieval effort * default retrieval effort * black + ruff * working on ux * more ux * ux * more ux updates * more ux updates * more ux work * more ux work * more ux work * model cleaning up after itself * simplify * remove old properties * WIP select web search * updating ux * updating ux * allow streaming even though web is allowed * test fixes * more tests * Refinements * UI improvements * Update tests * Update translations * Minimal fixes * Fix sharepoint citations * Sharepoint citations * Fix some sharept stuff * Latest fix * mypy, black, ruff * snapshot update * Update tests * Fixed mypy issues and added missing CI var * Fix black formatting * Make some fixes * Ruff format * Revert requirements.txt unneeded changes to bare minimum * Revert document-intelligence change * Address Copilot feedback * Remove old test snapshots, add e2e tests * Pin i18n-check to a version that works * Renaming files * Complete Contoso to Zava change * Fix the Zava domain to example.org since Zava.com does not exist * Revert unneeded changes to AGENTS and evals, and fix weird azd env var name * Revert unneeded changes to AGENTS and evals, and fix weird azd env var name --------- Co-authored-by: Pamela Fox <pamela.fox@gmail.com>
1 parent 5edb536 commit 09dd0ef

File tree

152 files changed

+4858
-2550
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

152 files changed

+4858
-2550
lines changed

.azdo/pipelines/azure-dev.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ steps:
7070
AZURE_OPENAI_CHATGPT_DEPLOYMENT_VERSION: $(AZURE_OPENAI_CHATGPT_DEPLOYMENT_VERSION)
7171
AZURE_OPENAI_CHATGPT_DEPLOYMENT_SKU: $(AZURE_OPENAI_CHATGPT_DEPLOYMENT_SKU)
7272
AZURE_OPENAI_REASONING_EFFORT: $(AZURE_OPENAI_REASONING_EFFORT)
73+
AGENTIC_KNOWLEDGEBASE_REASONING_EFFORT: $(AGENTIC_KNOWLEDGEBASE_REASONING_EFFORT)
7374
AZURE_OPENAI_EMB_MODEL_NAME: $(AZURE_OPENAI_EMB_MODEL_NAME)
7475
AZURE_OPENAI_EMB_DEPLOYMENT: $(AZURE_OPENAI_EMB_DEPLOYMENT)
7576
AZURE_OPENAI_EMB_DEPLOYMENT_CAPACITY: $(AZURE_OPENAI_EMB_DEPLOYMENT_CAPACITY)
@@ -124,6 +125,9 @@ steps:
124125
RAG_SEARCH_IMAGE_EMBEDDINGS: $(RAG_SEARCH_IMAGE_EMBEDDINGS)
125126
RAG_SEND_TEXT_SOURCES: $(RAG_SEND_TEXT_SOURCES)
126127
RAG_SEND_IMAGE_SOURCES: $(RAG_SEND_IMAGE_SOURCES)
128+
USE_AGENTIC_KNOWLEDGEBASE: $(USE_AGENTIC_KNOWLEDGEBASE)
129+
USE_WEB_SOURCE: $(USE_WEB_SOURCE)
130+
USE_SHAREPOINT_SOURCE: $(USE_SHAREPOINT_SOURCE)
127131
- task: AzureCLI@2
128132
displayName: Deploy Application
129133
inputs:

.github/workflows/azure-dev.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ jobs:
6161
AZURE_OPENAI_CHATGPT_DEPLOYMENT_CAPACITY: ${{ vars.AZURE_OPENAI_CHATGPT_DEPLOYMENT_CAPACITY }}
6262
AZURE_OPENAI_CHATGPT_DEPLOYMENT_VERSION: ${{ vars.AZURE_OPENAI_CHATGPT_DEPLOYMENT_VERSION }}
6363
AZURE_OPENAI_REASONING_EFFORT: ${{ vars.AZURE_OPENAI_REASONING_EFFORT }}
64+
AGENTIC_KNOWLEDGEBASE_REASONING_EFFORT: ${{ vars.AGENTIC_KNOWLEDGEBASE_REASONING_EFFORT }}
6465
AZURE_OPENAI_EMB_MODEL_NAME: ${{ vars.AZURE_OPENAI_EMB_MODEL_NAME }}
6566
AZURE_OPENAI_EMB_DEPLOYMENT: ${{ vars.AZURE_OPENAI_EMB_DEPLOYMENT }}
6667
AZURE_OPENAI_EMB_DEPLOYMENT_CAPACITY: ${{ vars.AZURE_OPENAI_EMB_DEPLOYMENT_CAPACITY }}
@@ -114,6 +115,9 @@ jobs:
114115
RAG_SEARCH_IMAGE_EMBEDDINGS: ${{ vars.RAG_SEARCH_IMAGE_EMBEDDINGS }}
115116
RAG_SEND_TEXT_SOURCES: ${{ vars.RAG_SEND_TEXT_SOURCES }}
116117
RAG_SEND_IMAGE_SOURCES: ${{ vars.RAG_SEND_IMAGE_SOURCES }}
118+
USE_AGENTIC_KNOWLEDGEBASE: ${{ vars.USE_AGENTIC_KNOWLEDGEBASE }}
119+
USE_WEB_SOURCE: ${{ vars.USE_WEB_SOURCE }}
120+
USE_SHAREPOINT_SOURCE: ${{ vars.USE_SHAREPOINT_SOURCE }}
117121
steps:
118122
- name: Checkout
119123
uses: actions/checkout@v5

.github/workflows/python-test.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ jobs:
5050
npm install
5151
npm run build
5252
- name: Check i18n translations
53-
run: npx -y @lingual/i18n-check --locales app/frontend/src/locales -s en -f i18next -r summary
53+
run: npx -y @lingual/i18n-check@0.8.12 --locales app/frontend/src/locales -s en -f i18next -r summary
5454
- name: Install dependencies
5555
run: |
5656
uv pip install -r requirements-dev.txt

AGENTS.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,11 @@ When adding new azd environment variables, update:
7272
1. .azdo/pipelines/azure-dev.yml: Add the new environment variable under `env` section
7373
1. .github/workflows/azure-dev.yml: Add the new environment variable under `env` section
7474

75+
You may also need to update:
76+
77+
1. app/backend/prepdocs.py: If the variable is used in the ingestion script, retrieve it from environment variables here. Not always needed.
78+
1. app/backend/app.py: If the variable is used in the backend application, retrieve it from environment variables in setup_clients() function. Not always needed.
79+
7580
## Adding a new setting to "Developer Settings" in RAG app
7681

7782
When adding a new developer setting, update:

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ This template, the application code and configuration it contains, has been buil
5353

5454
This sample demonstrates a few approaches for creating ChatGPT-like experiences over your own data using the Retrieval Augmented Generation pattern. It uses Azure OpenAI Service to access a GPT model (gpt-4.1-mini), and Azure AI Search for data indexing and retrieval.
5555

56-
The repo includes sample data so it's ready to try end to end. In this sample application we use a fictitious company called Contoso Electronics, and the experience allows its employees to ask questions about the benefits, internal policies, as well as job descriptions and roles.
56+
The repo includes sample data so it's ready to try end to end. In this sample application we use a fictitious company called Zava, and the experience allows its employees to ask questions about the benefits, internal policies, as well as job descriptions and roles.
5757

5858
## Features
5959

app/backend/app.py

Lines changed: 93 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@
2222
get_bearer_token_provider,
2323
)
2424
from azure.monitor.opentelemetry import configure_azure_monitor
25-
from azure.search.documents.agent.aio import KnowledgeAgentRetrievalClient
2625
from azure.search.documents.aio import SearchClient
2726
from azure.search.documents.indexes.aio import SearchIndexClient
27+
from azure.search.documents.knowledgebases.aio import KnowledgeBaseRetrievalClient
2828
from opentelemetry.instrumentation.aiohttp_client import AioHttpClientInstrumentor
2929
from opentelemetry.instrumentation.asgi import OpenTelemetryMiddleware
3030
from opentelemetry.instrumentation.httpx import (
@@ -44,23 +44,27 @@
4444
)
4545
from quart_cors import cors
4646

47-
from approaches.approach import Approach
47+
from approaches.approach import Approach, DataPoints
4848
from approaches.chatreadretrieveread import ChatReadRetrieveReadApproach
4949
from approaches.promptmanager import PromptyManager
5050
from approaches.retrievethenread import RetrieveThenReadApproach
5151
from chat_history.cosmosdb import chat_history_cosmosdb_bp
5252
from config import (
53-
CONFIG_AGENT_CLIENT,
54-
CONFIG_AGENTIC_RETRIEVAL_ENABLED,
53+
CONFIG_AGENTIC_KNOWLEDGEBASE_ENABLED,
5554
CONFIG_ASK_APPROACH,
5655
CONFIG_AUTH_CLIENT,
5756
CONFIG_CHAT_APPROACH,
5857
CONFIG_CHAT_HISTORY_BROWSER_ENABLED,
5958
CONFIG_CHAT_HISTORY_COSMOS_ENABLED,
6059
CONFIG_CREDENTIAL,
6160
CONFIG_DEFAULT_REASONING_EFFORT,
61+
CONFIG_DEFAULT_RETRIEVAL_REASONING_EFFORT,
6262
CONFIG_GLOBAL_BLOB_MANAGER,
6363
CONFIG_INGESTER,
64+
CONFIG_KNOWLEDGEBASE_CLIENT,
65+
CONFIG_KNOWLEDGEBASE_CLIENT_WITH_SHAREPOINT,
66+
CONFIG_KNOWLEDGEBASE_CLIENT_WITH_WEB,
67+
CONFIG_KNOWLEDGEBASE_CLIENT_WITH_WEB_AND_SHAREPOINT,
6468
CONFIG_LANGUAGE_PICKER_ENABLED,
6569
CONFIG_MULTIMODAL_ENABLED,
6670
CONFIG_OPENAI_CLIENT,
@@ -72,6 +76,7 @@
7276
CONFIG_REASONING_EFFORT_ENABLED,
7377
CONFIG_SEARCH_CLIENT,
7478
CONFIG_SEMANTIC_RANKER_DEPLOYED,
79+
CONFIG_SHAREPOINT_SOURCE_ENABLED,
7580
CONFIG_SPEECH_INPUT_ENABLED,
7681
CONFIG_SPEECH_OUTPUT_AZURE_ENABLED,
7782
CONFIG_SPEECH_OUTPUT_BROWSER_ENABLED,
@@ -83,6 +88,7 @@
8388
CONFIG_USER_BLOB_MANAGER,
8489
CONFIG_USER_UPLOAD_ENABLED,
8590
CONFIG_VECTOR_SEARCH_ENABLED,
91+
CONFIG_WEB_SOURCE_ENABLED,
8692
)
8793
from core.authentication import AuthenticationHelper
8894
from core.sessionhelper import create_session_id
@@ -197,7 +203,14 @@ async def ask(auth_claims: dict[str, Any]):
197203
class JSONEncoder(json.JSONEncoder):
198204
def default(self, o):
199205
if dataclasses.is_dataclass(o) and not isinstance(o, type):
200-
return dataclasses.asdict(o)
206+
as_dict = dataclasses.asdict(o)
207+
if isinstance(o, DataPoints):
208+
# Drop optional data point collections that are not populated to keep API surface stable
209+
return {k: v for k, v in as_dict.items() if v is not None}
210+
data_points_payload = as_dict.get("data_points") if isinstance(as_dict, dict) else None
211+
if isinstance(data_points_payload, dict) and data_points_payload.get("citation_activity_details") is None:
212+
data_points_payload.pop("citation_activity_details")
213+
return as_dict
201214
return super().default(o)
202215

203216

@@ -288,6 +301,7 @@ def config():
288301
"showReasoningEffortOption": current_app.config[CONFIG_REASONING_EFFORT_ENABLED],
289302
"streamingEnabled": current_app.config[CONFIG_STREAMING_ENABLED],
290303
"defaultReasoningEffort": current_app.config[CONFIG_DEFAULT_REASONING_EFFORT],
304+
"defaultRetrievalReasoningEffort": current_app.config[CONFIG_DEFAULT_RETRIEVAL_REASONING_EFFORT],
291305
"showVectorOption": current_app.config[CONFIG_VECTOR_SEARCH_ENABLED],
292306
"showUserUpload": current_app.config[CONFIG_USER_UPLOAD_ENABLED],
293307
"showLanguagePicker": current_app.config[CONFIG_LANGUAGE_PICKER_ENABLED],
@@ -296,11 +310,13 @@ def config():
296310
"showSpeechOutputAzure": current_app.config[CONFIG_SPEECH_OUTPUT_AZURE_ENABLED],
297311
"showChatHistoryBrowser": current_app.config[CONFIG_CHAT_HISTORY_BROWSER_ENABLED],
298312
"showChatHistoryCosmos": current_app.config[CONFIG_CHAT_HISTORY_COSMOS_ENABLED],
299-
"showAgenticRetrievalOption": current_app.config[CONFIG_AGENTIC_RETRIEVAL_ENABLED],
313+
"showAgenticRetrievalOption": current_app.config[CONFIG_AGENTIC_KNOWLEDGEBASE_ENABLED],
300314
"ragSearchTextEmbeddings": current_app.config[CONFIG_RAG_SEARCH_TEXT_EMBEDDINGS],
301315
"ragSearchImageEmbeddings": current_app.config[CONFIG_RAG_SEARCH_IMAGE_EMBEDDINGS],
302316
"ragSendTextSources": current_app.config[CONFIG_RAG_SEND_TEXT_SOURCES],
303317
"ragSendImageSources": current_app.config[CONFIG_RAG_SEND_IMAGE_SOURCES],
318+
"webSourceEnabled": current_app.config[CONFIG_WEB_SOURCE_ENABLED],
319+
"sharepointSourceEnabled": current_app.config[CONFIG_SHAREPOINT_SOURCE_ENABLED],
304320
}
305321
)
306322

@@ -405,12 +421,12 @@ async def setup_clients():
405421
AZURE_SEARCH_SERVICE = os.environ["AZURE_SEARCH_SERVICE"]
406422
AZURE_SEARCH_ENDPOINT = f"https://{AZURE_SEARCH_SERVICE}.search.windows.net"
407423
AZURE_SEARCH_INDEX = os.environ["AZURE_SEARCH_INDEX"]
408-
AZURE_SEARCH_AGENT = os.getenv("AZURE_SEARCH_AGENT", "")
424+
AZURE_SEARCH_KNOWLEDGEBASE_NAME = os.getenv("AZURE_SEARCH_KNOWLEDGEBASE_NAME", "")
409425
# Shared by all OpenAI deployments
410426
OPENAI_HOST = OpenAIHost(os.getenv("OPENAI_HOST", "azure"))
411427
OPENAI_CHATGPT_MODEL = os.environ["AZURE_OPENAI_CHATGPT_MODEL"]
412-
AZURE_OPENAI_SEARCHAGENT_MODEL = os.getenv("AZURE_OPENAI_SEARCHAGENT_MODEL")
413-
AZURE_OPENAI_SEARCHAGENT_DEPLOYMENT = os.getenv("AZURE_OPENAI_SEARCHAGENT_DEPLOYMENT")
428+
AZURE_OPENAI_KNOWLEDGEBASE_MODEL = os.getenv("AZURE_OPENAI_KNOWLEDGEBASE_MODEL")
429+
AZURE_OPENAI_KNOWLEDGEBASE_DEPLOYMENT = os.getenv("AZURE_OPENAI_KNOWLEDGEBASE_DEPLOYMENT")
414430
OPENAI_EMB_MODEL = os.getenv("AZURE_OPENAI_EMB_MODEL_NAME", "text-embedding-ada-002")
415431
OPENAI_EMB_DIMENSIONS = int(os.getenv("AZURE_OPENAI_EMB_DIMENSIONS") or 1536)
416432
OPENAI_REASONING_EFFORT = os.getenv("AZURE_OPENAI_REASONING_EFFORT")
@@ -466,7 +482,10 @@ async def setup_clients():
466482
USE_SPEECH_OUTPUT_AZURE = os.getenv("USE_SPEECH_OUTPUT_AZURE", "").lower() == "true"
467483
USE_CHAT_HISTORY_BROWSER = os.getenv("USE_CHAT_HISTORY_BROWSER", "").lower() == "true"
468484
USE_CHAT_HISTORY_COSMOS = os.getenv("USE_CHAT_HISTORY_COSMOS", "").lower() == "true"
469-
USE_AGENTIC_RETRIEVAL = os.getenv("USE_AGENTIC_RETRIEVAL", "").lower() == "true"
485+
USE_AGENTIC_KNOWLEDGEBASE = os.getenv("USE_AGENTIC_KNOWLEDGEBASE", "").lower() == "true"
486+
USE_WEB_SOURCE = os.getenv("USE_WEB_SOURCE", "").lower() == "true"
487+
USE_SHAREPOINT_SOURCE = os.getenv("USE_SHAREPOINT_SOURCE", "").lower() == "true"
488+
AGENTIC_KNOWLEDGEBASE_REASONING_EFFORT = os.getenv("AGENTIC_KNOWLEDGEBASE_REASONING_EFFORT", "low")
470489
USE_VECTORS = os.getenv("USE_VECTORS", "").lower() != "false"
471490

472491
# WEBSITE_HOSTNAME is always set by App Service, RUNNING_IN_PRODUCTION is set in main.bicep
@@ -510,9 +529,33 @@ async def setup_clients():
510529
index_name=AZURE_SEARCH_INDEX,
511530
credential=azure_credential,
512531
)
513-
agent_client = KnowledgeAgentRetrievalClient(
514-
endpoint=AZURE_SEARCH_ENDPOINT, agent_name=AZURE_SEARCH_AGENT, credential=azure_credential
532+
533+
knowledgebase_client = KnowledgeBaseRetrievalClient(
534+
endpoint=AZURE_SEARCH_ENDPOINT, knowledge_base_name=AZURE_SEARCH_KNOWLEDGEBASE_NAME, credential=azure_credential
515535
)
536+
knowledgebase_client_with_web = None
537+
knowledgebase_client_with_sharepoint = None
538+
knowledgebase_client_with_web_and_sharepoint = None
539+
540+
if AZURE_SEARCH_KNOWLEDGEBASE_NAME:
541+
if USE_WEB_SOURCE:
542+
knowledgebase_client_with_web = KnowledgeBaseRetrievalClient(
543+
endpoint=AZURE_SEARCH_ENDPOINT,
544+
knowledge_base_name=f"{AZURE_SEARCH_KNOWLEDGEBASE_NAME}-with-web",
545+
credential=azure_credential,
546+
)
547+
if USE_SHAREPOINT_SOURCE:
548+
knowledgebase_client_with_sharepoint = KnowledgeBaseRetrievalClient(
549+
endpoint=AZURE_SEARCH_ENDPOINT,
550+
knowledge_base_name=f"{AZURE_SEARCH_KNOWLEDGEBASE_NAME}-with-sp",
551+
credential=azure_credential,
552+
)
553+
if USE_WEB_SOURCE and USE_SHAREPOINT_SOURCE:
554+
knowledgebase_client_with_web_and_sharepoint = KnowledgeBaseRetrievalClient(
555+
endpoint=AZURE_SEARCH_ENDPOINT,
556+
knowledge_base_name=f"{AZURE_SEARCH_KNOWLEDGEBASE_NAME}-with-web-and-sp",
557+
credential=azure_credential,
558+
)
516559

517560
# Set up the global blob storage manager (used for global content/images, but not user uploads)
518561
global_blob_manager = BlobManager(
@@ -596,7 +639,14 @@ async def setup_clients():
596639
openai_deployment=AZURE_OPENAI_CHATGPT_DEPLOYMENT if OPENAI_HOST == OpenAIHost.AZURE else None,
597640
)
598641
search_info = setup_search_info(
599-
search_service=AZURE_SEARCH_SERVICE, index_name=AZURE_SEARCH_INDEX, azure_credential=azure_credential
642+
search_service=AZURE_SEARCH_SERVICE,
643+
index_name=AZURE_SEARCH_INDEX,
644+
azure_credential=azure_credential,
645+
use_agentic_knowledgebase=USE_AGENTIC_KNOWLEDGEBASE,
646+
azure_openai_endpoint=azure_openai_endpoint,
647+
knowledgebase_name=AZURE_SEARCH_KNOWLEDGEBASE_NAME,
648+
azure_openai_knowledgebase_deployment=AZURE_OPENAI_KNOWLEDGEBASE_DEPLOYMENT,
649+
azure_openai_knowledgebase_model=AZURE_OPENAI_KNOWLEDGEBASE_MODEL,
600650
)
601651

602652
text_embeddings_service = None
@@ -632,14 +682,20 @@ async def setup_clients():
632682

633683
current_app.config[CONFIG_OPENAI_CLIENT] = openai_client
634684
current_app.config[CONFIG_SEARCH_CLIENT] = search_client
635-
current_app.config[CONFIG_AGENT_CLIENT] = agent_client
685+
current_app.config[CONFIG_KNOWLEDGEBASE_CLIENT] = knowledgebase_client
686+
current_app.config[CONFIG_KNOWLEDGEBASE_CLIENT_WITH_WEB] = knowledgebase_client_with_web
687+
current_app.config[CONFIG_KNOWLEDGEBASE_CLIENT_WITH_SHAREPOINT] = knowledgebase_client_with_sharepoint
688+
current_app.config[CONFIG_KNOWLEDGEBASE_CLIENT_WITH_WEB_AND_SHAREPOINT] = (
689+
knowledgebase_client_with_web_and_sharepoint
690+
)
636691
current_app.config[CONFIG_AUTH_CLIENT] = auth_helper
637692

638693
current_app.config[CONFIG_SEMANTIC_RANKER_DEPLOYED] = AZURE_SEARCH_SEMANTIC_RANKER != "disabled"
639694
current_app.config[CONFIG_QUERY_REWRITING_ENABLED] = (
640695
AZURE_SEARCH_QUERY_REWRITING == "true" and AZURE_SEARCH_SEMANTIC_RANKER != "disabled"
641696
)
642697
current_app.config[CONFIG_DEFAULT_REASONING_EFFORT] = OPENAI_REASONING_EFFORT
698+
current_app.config[CONFIG_DEFAULT_RETRIEVAL_REASONING_EFFORT] = AGENTIC_KNOWLEDGEBASE_REASONING_EFFORT
643699
current_app.config[CONFIG_REASONING_EFFORT_ENABLED] = OPENAI_CHATGPT_MODEL in Approach.GPT_REASONING_MODELS
644700
current_app.config[CONFIG_STREAMING_ENABLED] = (
645701
OPENAI_CHATGPT_MODEL not in Approach.GPT_REASONING_MODELS
@@ -653,12 +709,16 @@ async def setup_clients():
653709
current_app.config[CONFIG_SPEECH_OUTPUT_AZURE_ENABLED] = USE_SPEECH_OUTPUT_AZURE
654710
current_app.config[CONFIG_CHAT_HISTORY_BROWSER_ENABLED] = USE_CHAT_HISTORY_BROWSER
655711
current_app.config[CONFIG_CHAT_HISTORY_COSMOS_ENABLED] = USE_CHAT_HISTORY_COSMOS
656-
current_app.config[CONFIG_AGENTIC_RETRIEVAL_ENABLED] = USE_AGENTIC_RETRIEVAL
712+
current_app.config[CONFIG_AGENTIC_KNOWLEDGEBASE_ENABLED] = USE_AGENTIC_KNOWLEDGEBASE
657713
current_app.config[CONFIG_MULTIMODAL_ENABLED] = USE_MULTIMODAL
658714
current_app.config[CONFIG_RAG_SEARCH_TEXT_EMBEDDINGS] = RAG_SEARCH_TEXT_EMBEDDINGS
659715
current_app.config[CONFIG_RAG_SEARCH_IMAGE_EMBEDDINGS] = RAG_SEARCH_IMAGE_EMBEDDINGS
660716
current_app.config[CONFIG_RAG_SEND_TEXT_SOURCES] = RAG_SEND_TEXT_SOURCES
661717
current_app.config[CONFIG_RAG_SEND_IMAGE_SOURCES] = RAG_SEND_IMAGE_SOURCES
718+
current_app.config[CONFIG_WEB_SOURCE_ENABLED] = USE_WEB_SOURCE
719+
if AGENTIC_KNOWLEDGEBASE_REASONING_EFFORT == "minimal" and current_app.config[CONFIG_WEB_SOURCE_ENABLED]:
720+
raise ValueError("Web source cannot be used with minimal retrieval reasoning effort")
721+
current_app.config[CONFIG_SHAREPOINT_SOURCE_ENABLED] = USE_SHAREPOINT_SOURCE
662722

663723
prompt_manager = PromptyManager()
664724

@@ -668,9 +728,12 @@ async def setup_clients():
668728
current_app.config[CONFIG_ASK_APPROACH] = RetrieveThenReadApproach(
669729
search_client=search_client,
670730
search_index_name=AZURE_SEARCH_INDEX,
671-
agent_model=AZURE_OPENAI_SEARCHAGENT_MODEL,
672-
agent_deployment=AZURE_OPENAI_SEARCHAGENT_DEPLOYMENT,
673-
agent_client=agent_client,
731+
knowledgebase_model=AZURE_OPENAI_KNOWLEDGEBASE_MODEL,
732+
knowledgebase_deployment=AZURE_OPENAI_KNOWLEDGEBASE_DEPLOYMENT,
733+
knowledgebase_client=knowledgebase_client,
734+
knowledgebase_client_with_web=knowledgebase_client_with_web,
735+
knowledgebase_client_with_sharepoint=knowledgebase_client_with_sharepoint,
736+
knowledgebase_client_with_web_and_sharepoint=knowledgebase_client_with_web_and_sharepoint,
674737
openai_client=openai_client,
675738
chatgpt_model=OPENAI_CHATGPT_MODEL,
676739
chatgpt_deployment=AZURE_OPENAI_CHATGPT_DEPLOYMENT,
@@ -688,15 +751,21 @@ async def setup_clients():
688751
image_embeddings_client=image_embeddings_client,
689752
global_blob_manager=global_blob_manager,
690753
user_blob_manager=user_blob_manager,
754+
use_web_source=current_app.config[CONFIG_WEB_SOURCE_ENABLED],
755+
use_sharepoint_source=current_app.config[CONFIG_SHAREPOINT_SOURCE_ENABLED],
756+
retrieval_reasoning_effort=AGENTIC_KNOWLEDGEBASE_REASONING_EFFORT,
691757
)
692758

693759
# ChatReadRetrieveReadApproach is used by /chat for multi-turn conversation
694760
current_app.config[CONFIG_CHAT_APPROACH] = ChatReadRetrieveReadApproach(
695761
search_client=search_client,
696762
search_index_name=AZURE_SEARCH_INDEX,
697-
agent_model=AZURE_OPENAI_SEARCHAGENT_MODEL,
698-
agent_deployment=AZURE_OPENAI_SEARCHAGENT_DEPLOYMENT,
699-
agent_client=agent_client,
763+
knowledgebase_model=AZURE_OPENAI_KNOWLEDGEBASE_MODEL,
764+
knowledgebase_deployment=AZURE_OPENAI_KNOWLEDGEBASE_DEPLOYMENT,
765+
knowledgebase_client=knowledgebase_client,
766+
knowledgebase_client_with_web=knowledgebase_client_with_web,
767+
knowledgebase_client_with_sharepoint=knowledgebase_client_with_sharepoint,
768+
knowledgebase_client_with_web_and_sharepoint=knowledgebase_client_with_web_and_sharepoint,
700769
openai_client=openai_client,
701770
chatgpt_model=OPENAI_CHATGPT_MODEL,
702771
chatgpt_deployment=AZURE_OPENAI_CHATGPT_DEPLOYMENT,
@@ -714,6 +783,9 @@ async def setup_clients():
714783
image_embeddings_client=image_embeddings_client,
715784
global_blob_manager=global_blob_manager,
716785
user_blob_manager=user_blob_manager,
786+
use_web_source=current_app.config[CONFIG_WEB_SOURCE_ENABLED],
787+
use_sharepoint_source=current_app.config[CONFIG_SHAREPOINT_SOURCE_ENABLED],
788+
retrieval_reasoning_effort=AGENTIC_KNOWLEDGEBASE_REASONING_EFFORT,
717789
)
718790

719791

0 commit comments

Comments
 (0)