fix(api): preserve citation metadata in web responses (#33778)

Co-authored-by: AI Assistant <bot@demo.com>
This commit is contained in:
Zixuan Cheng 2026-03-19 19:49:12 -07:00 committed by GitHub
parent 8bebec57c1
commit 8c9831177a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 60 additions and 0 deletions

View File

@ -74,11 +74,22 @@ class AppGenerateResponseConverter(ABC):
for resource in metadata["retriever_resources"]:
updated_resources.append(
{
"dataset_id": resource.get("dataset_id"),
"dataset_name": resource.get("dataset_name"),
"document_id": resource.get("document_id"),
"segment_id": resource.get("segment_id", ""),
"position": resource["position"],
"data_source_type": resource.get("data_source_type"),
"document_name": resource["document_name"],
"score": resource["score"],
"hit_count": resource.get("hit_count"),
"word_count": resource.get("word_count"),
"segment_position": resource.get("segment_position"),
"index_node_hash": resource.get("index_node_hash"),
"content": resource["content"],
"page": resource.get("page"),
"title": resource.get("title"),
"files": resource.get("files"),
"summary": resource.get("summary"),
}
)

View File

@ -44,11 +44,22 @@ class TestAgentChatAppGenerateResponseConverterBlocking:
metadata={
"retriever_resources": [
{
"dataset_id": "dataset-1",
"dataset_name": "Dataset 1",
"document_id": "document-1",
"segment_id": "s1",
"position": 1,
"data_source_type": "file",
"document_name": "doc",
"score": 0.9,
"hit_count": 2,
"word_count": 128,
"segment_position": 3,
"index_node_hash": "abc1234",
"content": "content",
"page": 5,
"title": "Citation Title",
"files": [{"id": "file-1"}],
}
],
"annotation_reply": {"id": "a"},
@ -107,11 +118,22 @@ class TestAgentChatAppGenerateResponseConverterStream:
metadata={
"retriever_resources": [
{
"dataset_id": "dataset-1",
"dataset_name": "Dataset 1",
"document_id": "document-1",
"segment_id": "s1",
"position": 1,
"data_source_type": "file",
"document_name": "doc",
"score": 0.9,
"hit_count": 2,
"word_count": 128,
"segment_position": 3,
"index_node_hash": "abc1234",
"content": "content",
"page": 5,
"title": "Citation Title",
"files": [{"id": "file-1"}],
"summary": "summary",
"extra": "ignored",
}
@ -151,11 +173,22 @@ class TestAgentChatAppGenerateResponseConverterStream:
assert "usage" not in metadata
assert metadata["retriever_resources"] == [
{
"dataset_id": "dataset-1",
"dataset_name": "Dataset 1",
"document_id": "document-1",
"segment_id": "s1",
"position": 1,
"data_source_type": "file",
"document_name": "doc",
"score": 0.9,
"hit_count": 2,
"word_count": 128,
"segment_position": 3,
"index_node_hash": "abc1234",
"content": "content",
"page": 5,
"title": "Citation Title",
"files": [{"id": "file-1"}],
"summary": "summary",
}
]

View File

@ -38,11 +38,22 @@ class TestCompletionAppGenerateResponseConverter:
metadata = {
"retriever_resources": [
{
"dataset_id": "dataset-1",
"dataset_name": "Dataset 1",
"document_id": "document-1",
"segment_id": "s",
"position": 1,
"data_source_type": "file",
"document_name": "doc",
"score": 0.9,
"hit_count": 2,
"word_count": 128,
"segment_position": 3,
"index_node_hash": "abc1234",
"content": "c",
"page": 5,
"title": "Citation Title",
"files": [{"id": "file-1"}],
"summary": "sum",
"extra": "x",
}
@ -66,7 +77,12 @@ class TestCompletionAppGenerateResponseConverter:
assert "annotation_reply" not in result["metadata"]
assert "usage" not in result["metadata"]
assert result["metadata"]["retriever_resources"][0]["dataset_id"] == "dataset-1"
assert result["metadata"]["retriever_resources"][0]["document_id"] == "document-1"
assert result["metadata"]["retriever_resources"][0]["segment_id"] == "s"
assert result["metadata"]["retriever_resources"][0]["data_source_type"] == "file"
assert result["metadata"]["retriever_resources"][0]["segment_position"] == 3
assert result["metadata"]["retriever_resources"][0]["index_node_hash"] == "abc1234"
assert "extra" not in result["metadata"]["retriever_resources"][0]
def test_convert_blocking_simple_response_metadata_not_dict(self):