Skip to content

Commit 9ab5ee2

Browse files
committed
Python: Add include_reference_source_data to agentic search requests
Pass knowledge_source_params with include_reference_source_data=True to both KnowledgeBaseRetrievalRequest constructions in _agentic_search(). Without this parameter, ref.source_data is always None even when the knowledge source has source_data_fields configured. Fixes #5095
1 parent d30103f commit 9ab5ee2

2 files changed

Lines changed: 80 additions & 0 deletions

File tree

python/packages/azure-ai-search/agent_framework_azure_ai_search/_context_provider.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
6464
KnowledgeBaseRetrievalResponse,
6565
KnowledgeRetrievalIntent,
6666
KnowledgeRetrievalSemanticIntent,
67+
KnowledgeSourceParams,
6768
)
6869
from azure.search.documents.knowledgebases.models import (
6970
KnowledgeRetrievalLowReasoningEffort as KBRetrievalLowReasoningEffort,
@@ -99,6 +100,7 @@
99100
KnowledgeBaseRetrievalResponse,
100101
KnowledgeRetrievalIntent,
101102
KnowledgeRetrievalSemanticIntent,
103+
KnowledgeSourceParams,
102104
)
103105
from azure.search.documents.knowledgebases.models import (
104106
KnowledgeRetrievalLowReasoningEffort as KBRetrievalLowReasoningEffort,
@@ -830,6 +832,12 @@ async def _agentic_search(self, messages: list[Message]) -> list[Message]:
830832
retrieval_reasoning_effort=reasoning_effort,
831833
output_mode=output_mode,
832834
include_activity=True,
835+
knowledge_source_params=[
836+
KnowledgeSourceParams(
837+
knowledge_source_name=f"{self.index_name}-source",
838+
include_reference_source_data=True,
839+
),
840+
],
833841
)
834842
else:
835843
kb_messages = self._prepare_messages_for_kb_search(messages)
@@ -838,6 +846,12 @@ async def _agentic_search(self, messages: list[Message]) -> list[Message]:
838846
retrieval_reasoning_effort=reasoning_effort,
839847
output_mode=output_mode,
840848
include_activity=True,
849+
knowledge_source_params=[
850+
KnowledgeSourceParams(
851+
knowledge_source_name=f"{self.index_name}-source",
852+
include_reference_source_data=True,
853+
),
854+
],
841855
)
842856

843857
if not self._retrieval_client:

python/packages/azure-ai-search/tests/test_aisearch_context_provider.py

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1310,6 +1310,72 @@ async def test_none_response_returns_default_message(self) -> None:
13101310
assert len(results) == 1
13111311
assert results[0].text == "No results found from Knowledge Base."
13121312

1313+
async def test_minimal_reasoning_includes_knowledge_source_params(self) -> None:
1314+
provider = _make_provider()
1315+
provider._knowledge_base_initialized = True
1316+
provider.knowledge_base_name = "kb"
1317+
provider.retrieval_reasoning_effort = "minimal"
1318+
1319+
mock_content = Mock()
1320+
mock_content.text = "Answer"
1321+
mock_message = Mock()
1322+
mock_message.role = "assistant"
1323+
mock_message.content = [mock_content]
1324+
mock_result = Mock()
1325+
mock_result.response = [mock_message]
1326+
mock_result.references = None
1327+
1328+
mock_retrieval = AsyncMock()
1329+
mock_retrieval.retrieve = AsyncMock(return_value=mock_result)
1330+
provider._retrieval_client = mock_retrieval
1331+
1332+
with patch(
1333+
"agent_framework_azure_ai_search._context_provider.KnowledgeBaseMessageTextContent",
1334+
type(mock_content),
1335+
):
1336+
await provider._agentic_search([Message(role="user", contents=["query"])])
1337+
1338+
call_kwargs = mock_retrieval.retrieve.call_args
1339+
request = call_kwargs.kwargs.get("retrieval_request") or call_kwargs.args[0]
1340+
assert request.knowledge_source_params is not None
1341+
assert len(request.knowledge_source_params) == 1
1342+
params = request.knowledge_source_params[0]
1343+
assert params.knowledge_source_name == "test-index-source"
1344+
assert params.include_reference_source_data is True
1345+
1346+
async def test_non_minimal_reasoning_includes_knowledge_source_params(self) -> None:
1347+
provider = _make_provider()
1348+
provider._knowledge_base_initialized = True
1349+
provider.knowledge_base_name = "kb"
1350+
provider.retrieval_reasoning_effort = "medium"
1351+
1352+
mock_content = Mock()
1353+
mock_content.text = "Answer"
1354+
mock_message = Mock()
1355+
mock_message.role = "assistant"
1356+
mock_message.content = [mock_content]
1357+
mock_result = Mock()
1358+
mock_result.response = [mock_message]
1359+
mock_result.references = None
1360+
1361+
mock_retrieval = AsyncMock()
1362+
mock_retrieval.retrieve = AsyncMock(return_value=mock_result)
1363+
provider._retrieval_client = mock_retrieval
1364+
1365+
with patch(
1366+
"agent_framework_azure_ai_search._context_provider.KnowledgeBaseMessageTextContent",
1367+
type(mock_content),
1368+
):
1369+
await provider._agentic_search([Message(role="user", contents=["query"])])
1370+
1371+
call_kwargs = mock_retrieval.retrieve.call_args
1372+
request = call_kwargs.kwargs.get("retrieval_request") or call_kwargs.args[0]
1373+
assert request.knowledge_source_params is not None
1374+
assert len(request.knowledge_source_params) == 1
1375+
params = request.knowledge_source_params[0]
1376+
assert params.knowledge_source_name == "test-index-source"
1377+
assert params.include_reference_source_data is True
1378+
13131379

13141380
# -- before_run: agentic mode --------------------------------------------------
13151381

0 commit comments

Comments
 (0)