diff --git a/api/core/rag/index_processor/index_processor.py b/api/core/rag/index_processor/index_processor.py index a6d1db214b0..825ae012269 100644 --- a/api/core/rag/index_processor/index_processor.py +++ b/api/core/rag/index_processor/index_processor.py @@ -35,7 +35,10 @@ class IndexProcessor: if "parent_mode" in preview: data.parent_mode = preview["parent_mode"] - for item in preview["preview"]: + # Different index processors return different preview shapes: + # - paragraph/parent-child processors: {"preview": [...]} + # - QA processor: {"qa_preview": [...]} (no "preview" key) + for item in preview.get("preview", []): if "content" in item and "child_chunks" in item: data.preview.append( PreviewItem(content=item["content"], child_chunks=item["child_chunks"], summary=None) @@ -44,6 +47,10 @@ class IndexProcessor: data.qa_preview.append(QaPreview(question=item["question"], answer=item["answer"])) elif "content" in item: data.preview.append(PreviewItem(content=item["content"], child_chunks=None, summary=None)) + + for item in preview.get("qa_preview", []): + if "question" in item and "answer" in item: + data.qa_preview.append(QaPreview(question=item["question"], answer=item["answer"])) return data def index_and_clean( diff --git a/api/tests/unit_tests/core/rag/indexing/test_index_processor.py b/api/tests/unit_tests/core/rag/indexing/test_index_processor.py new file mode 100644 index 00000000000..a3f284955bc --- /dev/null +++ b/api/tests/unit_tests/core/rag/indexing/test_index_processor.py @@ -0,0 +1,15 @@ +from core.rag.index_processor.index_processor import IndexProcessor + + +class TestIndexProcessor: + def test_format_preview_supports_qa_preview_shape(self) -> None: + preview = IndexProcessor().format_preview( + "qa_model", + {"qa_chunks": [{"question": "Q1", "answer": "A1"}]}, + ) + + assert preview.chunk_structure == "qa_model" + assert preview.total_segments == 1 + assert len(preview.qa_preview) == 1 + assert preview.qa_preview[0].question == "Q1" + assert preview.qa_preview[0].answer == "A1"