Coverage for intelligence_toolkit/tests/unit/query_text_data/test_answer_builder.py: 100%
22 statements
« prev ^ index » next coverage.py v7.10.7, created at 2025-10-16 13:41 -0300
« prev ^ index » next coverage.py v7.10.7, created at 2025-10-16 13:41 -0300
1import json
3import pytest
5from intelligence_toolkit.query_text_data.answer_builder import answer_query
6from intelligence_toolkit.query_text_data.classes import AnswerObject
9class _DummyCommentary:
10 def __init__(self):
11 self.structure = {
12 "themes": {"Theme Alpha": ["point-1"]},
13 "points": {"point-1": "Point One"},
14 "point_sources": {"point-1": [1]},
15 }
17 def get_clustered_cids(self):
18 return {"Theme Alpha": [1]}
21class _DummyProcessedChunks:
22 cid_to_text = {
23 1: json.dumps(
24 {"title": "Doc", "chunk_id": 1, "text_chunk": "Chunk body"}
25 )
26 }
29@pytest.mark.asyncio
30async def test_answer_query_returns_report_with_sources(mocker):
31 mocker.patch(
32 "intelligence_toolkit.query_text_data.answer_builder.utils.prepare_messages",
33 side_effect=lambda *args, **kwargs: {"args": args, "kwargs": kwargs},
34 )
35 mocker.patch(
36 "intelligence_toolkit.query_text_data.answer_builder.utils.map_generate_text",
37 new=mocker.AsyncMock(
38 return_value=[
39 json.dumps(
40 {
41 "theme_title": "Theme Alpha",
42 "theme_points": [
43 {
44 "point_title": "Point One",
45 "point_evidence": "**Source evidence**: Point One [source: 1]",
46 "point_commentary": "**AI commentary**: Point One",
47 }
48 ],
49 }
50 )
51 ]
52 ),
53 )
54 mocker.patch(
55 "intelligence_toolkit.query_text_data.answer_builder.utils.generate_text",
56 return_value=json.dumps(
57 {
58 "answer": "Some answer",
59 "report_title": "Aligned Themes",
60 "report_overview": "Overview text",
61 "report_implications": "Implication text",
62 }
63 ),
64 )
66 result = await answer_query(
67 ai_configuration={"model": "test"},
68 query="What happened?",
69 expanded_query="Detailed question",
70 processed_chunks=_DummyProcessedChunks(),
71 commentary=_DummyCommentary(),
72 )
74 assert isinstance(result, AnswerObject)
75 assert result.references == [1]
76 assert "[source: [1](#source-1)]" in result.extended_answer
77 assert "#### Source 1" in result.extended_answer
78 assert "Doc (1)" in result.referenced_chunks