From d0845e437bfc6840ec35b60d2a896d1e431b95a6 Mon Sep 17 00:00:00 2001 From: Clement Fauchere Date: Tue, 31 Mar 2026 18:25:49 -0500 Subject: [PATCH 1/3] feat: include index_id in context grounding tool output for tracing The context grounding tool's trace span has an index_id field but it was never populated because the tool output didn't include it. The index ID is resolved inside the SDK's unified_search but discarded before reaching the instrumentor. This change captures the resolved index_id from the search result on the retriever and includes it in the semantic search tool return value, so the trace instrumentor in uipath-agents-python can write it to the span. Requires a corresponding SDK change to expose index_id on UnifiedQueryResult. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/uipath_langchain/agent/tools/context_tool.py | 3 ++- src/uipath_langchain/retrievers/context_grounding_retriever.py | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/uipath_langchain/agent/tools/context_tool.py b/src/uipath_langchain/agent/tools/context_tool.py index ff5fd128b..e5d26b5a0 100644 --- a/src/uipath_langchain/agent/tools/context_tool.py +++ b/src/uipath_langchain/agent/tools/context_tool.py @@ -273,7 +273,8 @@ async def context_tool_fn( "documents": [ {"metadata": doc.metadata, "page_content": doc.page_content} for doc in docs - ] + ], + "index_id": retriever.resolved_index_id, } if arg_props or has_arg_folder: diff --git a/src/uipath_langchain/retrievers/context_grounding_retriever.py b/src/uipath_langchain/retrievers/context_grounding_retriever.py index dc448c6ad..f58f9c5fb 100644 --- a/src/uipath_langchain/retrievers/context_grounding_retriever.py +++ b/src/uipath_langchain/retrievers/context_grounding_retriever.py @@ -17,6 +17,7 @@ class ContextGroundingRetriever(BaseRetriever): threshold: float = 0.0 scope_folder: str | None = None scope_extension: str | None = None + resolved_index_id: str | None = None def _build_scope(self) -> UnifiedSearchScope | None: if self.scope_folder or self.scope_extension: @@ -44,6 +45,7 @@ def _get_relevant_documents( folder_key=self.folder_key, ) + self.resolved_index_id = getattr(result, "index_id", None) values = result.semantic_results.values if result.semantic_results else [] return [ @@ -80,6 +82,7 @@ async def _aget_relevant_documents( folder_key=self.folder_key, ) + self.resolved_index_id = getattr(result, "index_id", None) values = result.semantic_results.values if result.semantic_results else [] return [ From 62e1f622868dda7c8772fb2fb2ad138c69e591df Mon Sep 17 00:00:00 2001 From: Clement Fauchere Date: Tue, 31 Mar 2026 18:53:38 -0500 Subject: [PATCH 2/3] fix: read index_id directly from UnifiedQueryResult instead of getattr Depends on UiPath/uipath-python#1534 which exposes index_id on the result. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../retrievers/context_grounding_retriever.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/uipath_langchain/retrievers/context_grounding_retriever.py b/src/uipath_langchain/retrievers/context_grounding_retriever.py index f58f9c5fb..9d78b288a 100644 --- a/src/uipath_langchain/retrievers/context_grounding_retriever.py +++ b/src/uipath_langchain/retrievers/context_grounding_retriever.py @@ -45,7 +45,7 @@ def _get_relevant_documents( folder_key=self.folder_key, ) - self.resolved_index_id = getattr(result, "index_id", None) + self.resolved_index_id = result.index_id values = result.semantic_results.values if result.semantic_results else [] return [ @@ -82,7 +82,7 @@ async def _aget_relevant_documents( folder_key=self.folder_key, ) - self.resolved_index_id = getattr(result, "index_id", None) + self.resolved_index_id = result.index_id values = result.semantic_results.values if result.semantic_results else [] return [ From ec34c8b2ae0458823f060120195a072f8016c76a Mon Sep 17 00:00:00 2001 From: Clement Fauchere Date: Tue, 31 Mar 2026 19:11:32 -0500 Subject: [PATCH 3/3] fix: rename resolved_index_id to index_id, use result.index_id directly Depends on UiPath/uipath-python#1534. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/uipath_langchain/agent/tools/context_tool.py | 2 +- .../retrievers/context_grounding_retriever.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/uipath_langchain/agent/tools/context_tool.py b/src/uipath_langchain/agent/tools/context_tool.py index e5d26b5a0..a27b667dd 100644 --- a/src/uipath_langchain/agent/tools/context_tool.py +++ b/src/uipath_langchain/agent/tools/context_tool.py @@ -274,7 +274,7 @@ async def context_tool_fn( {"metadata": doc.metadata, "page_content": doc.page_content} for doc in docs ], - "index_id": retriever.resolved_index_id, + "index_id": retriever.index_id, } if arg_props or has_arg_folder: diff --git a/src/uipath_langchain/retrievers/context_grounding_retriever.py b/src/uipath_langchain/retrievers/context_grounding_retriever.py index 9d78b288a..5a9b51a1e 100644 --- a/src/uipath_langchain/retrievers/context_grounding_retriever.py +++ b/src/uipath_langchain/retrievers/context_grounding_retriever.py @@ -17,7 +17,7 @@ class ContextGroundingRetriever(BaseRetriever): threshold: float = 0.0 scope_folder: str | None = None scope_extension: str | None = None - resolved_index_id: str | None = None + index_id: str | None = None def _build_scope(self) -> UnifiedSearchScope | None: if self.scope_folder or self.scope_extension: @@ -45,7 +45,7 @@ def _get_relevant_documents( folder_key=self.folder_key, ) - self.resolved_index_id = result.index_id + self.index_id = result.index_id values = result.semantic_results.values if result.semantic_results else [] return [ @@ -82,7 +82,7 @@ async def _aget_relevant_documents( folder_key=self.folder_key, ) - self.resolved_index_id = result.index_id + self.index_id = result.index_id values = result.semantic_results.values if result.semantic_results else [] return [