cognee 0.5.1.dev0__py3-none-any.whl → 0.5.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (241) hide show
  1. cognee/__init__.py +2 -0
  2. cognee/alembic/README +1 -0
  3. cognee/alembic/env.py +107 -0
  4. cognee/alembic/script.py.mako +26 -0
  5. cognee/alembic/versions/1a58b986e6e1_enable_delete_for_old_tutorial_notebooks.py +52 -0
  6. cognee/alembic/versions/1d0bb7fede17_add_pipeline_run_status.py +33 -0
  7. cognee/alembic/versions/1daae0df1866_incremental_loading.py +48 -0
  8. cognee/alembic/versions/211ab850ef3d_add_sync_operations_table.py +118 -0
  9. cognee/alembic/versions/45957f0a9849_add_notebook_table.py +46 -0
  10. cognee/alembic/versions/46a6ce2bd2b2_expand_dataset_database_with_json_.py +333 -0
  11. cognee/alembic/versions/482cd6517ce4_add_default_user.py +30 -0
  12. cognee/alembic/versions/76625596c5c3_expand_dataset_database_for_multi_user.py +98 -0
  13. cognee/alembic/versions/8057ae7329c2_initial_migration.py +25 -0
  14. cognee/alembic/versions/9e7a3cb85175_loader_separation.py +104 -0
  15. cognee/alembic/versions/a1b2c3d4e5f6_add_label_column_to_data.py +38 -0
  16. cognee/alembic/versions/ab7e313804ae_permission_system_rework.py +236 -0
  17. cognee/alembic/versions/b9274c27a25a_kuzu_11_migration.py +75 -0
  18. cognee/alembic/versions/c946955da633_multi_tenant_support.py +137 -0
  19. cognee/alembic/versions/e1ec1dcb50b6_add_last_accessed_to_data.py +51 -0
  20. cognee/alembic/versions/e4ebee1091e7_expand_data_model_info.py +140 -0
  21. cognee/alembic.ini +117 -0
  22. cognee/api/v1/add/routers/get_add_router.py +2 -0
  23. cognee/api/v1/cognify/cognify.py +11 -6
  24. cognee/api/v1/cognify/routers/get_cognify_router.py +8 -0
  25. cognee/api/v1/config/config.py +60 -0
  26. cognee/api/v1/datasets/routers/get_datasets_router.py +45 -3
  27. cognee/api/v1/memify/routers/get_memify_router.py +2 -0
  28. cognee/api/v1/search/routers/get_search_router.py +21 -6
  29. cognee/api/v1/search/search.py +25 -5
  30. cognee/api/v1/sync/routers/get_sync_router.py +3 -3
  31. cognee/cli/commands/add_command.py +1 -1
  32. cognee/cli/commands/cognify_command.py +6 -0
  33. cognee/cli/commands/config_command.py +1 -1
  34. cognee/context_global_variables.py +5 -1
  35. cognee/eval_framework/answer_generation/answer_generation_executor.py +7 -8
  36. cognee/infrastructure/databases/cache/cache_db_interface.py +38 -1
  37. cognee/infrastructure/databases/cache/config.py +6 -0
  38. cognee/infrastructure/databases/cache/fscache/FsCacheAdapter.py +21 -0
  39. cognee/infrastructure/databases/cache/get_cache_engine.py +9 -3
  40. cognee/infrastructure/databases/cache/redis/RedisAdapter.py +60 -1
  41. cognee/infrastructure/databases/dataset_database_handler/supported_dataset_database_handlers.py +7 -0
  42. cognee/infrastructure/databases/graph/get_graph_engine.py +29 -1
  43. cognee/infrastructure/databases/graph/neo4j_driver/Neo4jAuraDevDatasetDatabaseHandler.py +62 -27
  44. cognee/infrastructure/databases/hybrid/neptune_analytics/NeptuneAnalyticsAdapter.py +17 -4
  45. cognee/infrastructure/databases/relational/sqlalchemy/SqlAlchemyAdapter.py +2 -1
  46. cognee/infrastructure/databases/vector/chromadb/ChromaDBAdapter.py +2 -0
  47. cognee/infrastructure/databases/vector/config.py +6 -0
  48. cognee/infrastructure/databases/vector/create_vector_engine.py +69 -22
  49. cognee/infrastructure/databases/vector/embeddings/LiteLLMEmbeddingEngine.py +64 -9
  50. cognee/infrastructure/databases/vector/embeddings/OllamaEmbeddingEngine.py +13 -2
  51. cognee/infrastructure/databases/vector/lancedb/LanceDBAdapter.py +16 -3
  52. cognee/infrastructure/databases/vector/models/ScoredResult.py +3 -3
  53. cognee/infrastructure/databases/vector/pgvector/PGVectorAdapter.py +16 -3
  54. cognee/infrastructure/databases/vector/pgvector/PGVectorDatasetDatabaseHandler.py +86 -0
  55. cognee/infrastructure/databases/vector/pgvector/create_db_and_tables.py +81 -2
  56. cognee/infrastructure/databases/vector/vector_db_interface.py +8 -0
  57. cognee/infrastructure/files/utils/get_data_file_path.py +33 -27
  58. cognee/infrastructure/llm/prompts/extract_query_time.txt +1 -1
  59. cognee/infrastructure/llm/prompts/generate_event_entity_prompt.txt +1 -1
  60. cognee/infrastructure/llm/prompts/generate_event_graph_prompt.txt +1 -1
  61. cognee/infrastructure/llm/prompts/generate_graph_prompt.txt +2 -2
  62. cognee/infrastructure/llm/prompts/generate_graph_prompt_guided.txt +1 -1
  63. cognee/infrastructure/llm/prompts/generate_graph_prompt_oneshot.txt +2 -2
  64. cognee/infrastructure/llm/prompts/generate_graph_prompt_simple.txt +1 -1
  65. cognee/infrastructure/llm/prompts/generate_graph_prompt_strict.txt +1 -1
  66. cognee/infrastructure/llm/prompts/search_type_selector_prompt.txt +6 -6
  67. cognee/infrastructure/llm/prompts/test.txt +1 -1
  68. cognee/infrastructure/llm/prompts/translate_content.txt +19 -0
  69. cognee/infrastructure/llm/structured_output_framework/litellm_instructor/llm/get_llm_client.py +24 -0
  70. cognee/infrastructure/llm/structured_output_framework/litellm_instructor/llm/llama_cpp/adapter.py +191 -0
  71. cognee/modules/chunking/models/DocumentChunk.py +0 -1
  72. cognee/modules/cognify/config.py +2 -0
  73. cognee/modules/data/models/Data.py +1 -0
  74. cognee/modules/engine/models/Entity.py +0 -1
  75. cognee/modules/engine/operations/setup.py +6 -0
  76. cognee/modules/graph/cognee_graph/CogneeGraph.py +150 -37
  77. cognee/modules/graph/cognee_graph/CogneeGraphElements.py +48 -2
  78. cognee/modules/graph/utils/__init__.py +1 -0
  79. cognee/modules/graph/utils/get_entity_nodes_from_triplets.py +12 -0
  80. cognee/modules/notebooks/methods/__init__.py +1 -0
  81. cognee/modules/notebooks/methods/create_notebook.py +0 -34
  82. cognee/modules/notebooks/methods/create_tutorial_notebooks.py +191 -0
  83. cognee/modules/notebooks/methods/get_notebooks.py +12 -8
  84. cognee/modules/notebooks/tutorials/cognee-basics/cell-1.md +3 -0
  85. cognee/modules/notebooks/tutorials/cognee-basics/cell-2.md +10 -0
  86. cognee/modules/notebooks/tutorials/cognee-basics/cell-3.md +7 -0
  87. cognee/modules/notebooks/tutorials/cognee-basics/cell-4.py +28 -0
  88. cognee/modules/notebooks/tutorials/cognee-basics/cell-5.py +3 -0
  89. cognee/modules/notebooks/tutorials/cognee-basics/cell-6.py +9 -0
  90. cognee/modules/notebooks/tutorials/cognee-basics/cell-7.py +17 -0
  91. cognee/modules/notebooks/tutorials/cognee-basics/config.json +4 -0
  92. cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-1.md +3 -0
  93. cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-10.md +3 -0
  94. cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-11.md +3 -0
  95. cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-12.py +3 -0
  96. cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-13.md +7 -0
  97. cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-14.py +6 -0
  98. cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-15.md +3 -0
  99. cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-16.py +7 -0
  100. cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-2.md +9 -0
  101. cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-3.md +7 -0
  102. cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-4.md +9 -0
  103. cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-5.md +5 -0
  104. cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-6.py +13 -0
  105. cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-7.md +3 -0
  106. cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-8.md +3 -0
  107. cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-9.py +31 -0
  108. cognee/modules/notebooks/tutorials/python-development-with-cognee/config.json +4 -0
  109. cognee/modules/notebooks/tutorials/python-development-with-cognee/data/copilot_conversations.json +107 -0
  110. cognee/modules/notebooks/tutorials/python-development-with-cognee/data/guido_contributions.json +976 -0
  111. cognee/modules/notebooks/tutorials/python-development-with-cognee/data/my_developer_rules.md +79 -0
  112. cognee/modules/notebooks/tutorials/python-development-with-cognee/data/pep_style_guide.md +74 -0
  113. cognee/modules/notebooks/tutorials/python-development-with-cognee/data/zen_principles.md +74 -0
  114. cognee/modules/retrieval/EntityCompletionRetriever.py +51 -38
  115. cognee/modules/retrieval/__init__.py +0 -1
  116. cognee/modules/retrieval/base_retriever.py +66 -10
  117. cognee/modules/retrieval/chunks_retriever.py +57 -49
  118. cognee/modules/retrieval/coding_rules_retriever.py +12 -5
  119. cognee/modules/retrieval/completion_retriever.py +29 -28
  120. cognee/modules/retrieval/cypher_search_retriever.py +25 -20
  121. cognee/modules/retrieval/graph_completion_context_extension_retriever.py +42 -46
  122. cognee/modules/retrieval/graph_completion_cot_retriever.py +68 -51
  123. cognee/modules/retrieval/graph_completion_retriever.py +78 -63
  124. cognee/modules/retrieval/graph_summary_completion_retriever.py +2 -0
  125. cognee/modules/retrieval/lexical_retriever.py +34 -12
  126. cognee/modules/retrieval/natural_language_retriever.py +18 -15
  127. cognee/modules/retrieval/summaries_retriever.py +51 -34
  128. cognee/modules/retrieval/temporal_retriever.py +59 -49
  129. cognee/modules/retrieval/triplet_retriever.py +31 -32
  130. cognee/modules/retrieval/utils/access_tracking.py +88 -0
  131. cognee/modules/retrieval/utils/brute_force_triplet_search.py +99 -85
  132. cognee/modules/retrieval/utils/node_edge_vector_search.py +174 -0
  133. cognee/modules/search/methods/__init__.py +1 -0
  134. cognee/modules/search/methods/get_retriever_output.py +53 -0
  135. cognee/modules/search/methods/get_search_type_retriever_instance.py +252 -0
  136. cognee/modules/search/methods/search.py +90 -215
  137. cognee/modules/search/models/SearchResultPayload.py +67 -0
  138. cognee/modules/search/types/SearchResult.py +1 -8
  139. cognee/modules/search/types/SearchType.py +1 -2
  140. cognee/modules/search/types/__init__.py +1 -1
  141. cognee/modules/search/utils/__init__.py +1 -2
  142. cognee/modules/search/utils/transform_insights_to_graph.py +2 -2
  143. cognee/modules/search/utils/{transform_context_to_graph.py → transform_triplets_to_graph.py} +2 -2
  144. cognee/modules/users/authentication/default/default_transport.py +11 -1
  145. cognee/modules/users/authentication/get_api_auth_backend.py +2 -1
  146. cognee/modules/users/authentication/get_client_auth_backend.py +2 -1
  147. cognee/modules/users/methods/create_user.py +0 -9
  148. cognee/modules/users/permissions/methods/has_user_management_permission.py +29 -0
  149. cognee/modules/visualization/cognee_network_visualization.py +1 -1
  150. cognee/run_migrations.py +48 -0
  151. cognee/shared/exceptions/__init__.py +1 -3
  152. cognee/shared/exceptions/exceptions.py +11 -1
  153. cognee/shared/usage_logger.py +332 -0
  154. cognee/shared/utils.py +12 -5
  155. cognee/tasks/chunks/__init__.py +9 -0
  156. cognee/tasks/cleanup/cleanup_unused_data.py +172 -0
  157. cognee/tasks/graph/__init__.py +7 -0
  158. cognee/tasks/memify/__init__.py +8 -0
  159. cognee/tasks/memify/extract_usage_frequency.py +613 -0
  160. cognee/tasks/summarization/models.py +0 -2
  161. cognee/tasks/temporal_graph/__init__.py +0 -1
  162. cognee/tasks/translation/__init__.py +96 -0
  163. cognee/tasks/translation/config.py +110 -0
  164. cognee/tasks/translation/detect_language.py +190 -0
  165. cognee/tasks/translation/exceptions.py +62 -0
  166. cognee/tasks/translation/models.py +72 -0
  167. cognee/tasks/translation/providers/__init__.py +44 -0
  168. cognee/tasks/translation/providers/azure_provider.py +192 -0
  169. cognee/tasks/translation/providers/base.py +85 -0
  170. cognee/tasks/translation/providers/google_provider.py +158 -0
  171. cognee/tasks/translation/providers/llm_provider.py +143 -0
  172. cognee/tasks/translation/translate_content.py +282 -0
  173. cognee/tasks/web_scraper/default_url_crawler.py +6 -2
  174. cognee/tests/cli_tests/cli_unit_tests/test_cli_commands.py +1 -0
  175. cognee/tests/cli_tests/cli_unit_tests/test_cli_edge_cases.py +3 -0
  176. cognee/tests/integration/retrieval/test_brute_force_triplet_search_with_cognify.py +62 -0
  177. cognee/tests/integration/retrieval/test_chunks_retriever.py +115 -16
  178. cognee/tests/integration/retrieval/test_graph_completion_retriever.py +13 -5
  179. cognee/tests/integration/retrieval/test_graph_completion_retriever_context_extension.py +22 -20
  180. cognee/tests/integration/retrieval/test_graph_completion_retriever_cot.py +23 -24
  181. cognee/tests/integration/retrieval/test_rag_completion_retriever.py +70 -5
  182. cognee/tests/integration/retrieval/test_structured_output.py +62 -18
  183. cognee/tests/integration/retrieval/test_summaries_retriever.py +20 -9
  184. cognee/tests/integration/retrieval/test_temporal_retriever.py +38 -8
  185. cognee/tests/integration/retrieval/test_triplet_retriever.py +13 -4
  186. cognee/tests/integration/shared/test_usage_logger_integration.py +255 -0
  187. cognee/tests/tasks/translation/README.md +147 -0
  188. cognee/tests/tasks/translation/__init__.py +1 -0
  189. cognee/tests/tasks/translation/config_test.py +93 -0
  190. cognee/tests/tasks/translation/detect_language_test.py +118 -0
  191. cognee/tests/tasks/translation/providers_test.py +151 -0
  192. cognee/tests/tasks/translation/translate_content_test.py +213 -0
  193. cognee/tests/test_chromadb.py +1 -1
  194. cognee/tests/test_cleanup_unused_data.py +165 -0
  195. cognee/tests/test_delete_by_id.py +6 -6
  196. cognee/tests/test_extract_usage_frequency.py +308 -0
  197. cognee/tests/test_kuzu.py +17 -7
  198. cognee/tests/test_lancedb.py +3 -1
  199. cognee/tests/test_library.py +1 -1
  200. cognee/tests/test_neo4j.py +17 -7
  201. cognee/tests/test_neptune_analytics_vector.py +3 -1
  202. cognee/tests/test_permissions.py +172 -187
  203. cognee/tests/test_pgvector.py +3 -1
  204. cognee/tests/test_relational_db_migration.py +15 -1
  205. cognee/tests/test_remote_kuzu.py +3 -1
  206. cognee/tests/test_s3_file_storage.py +1 -1
  207. cognee/tests/test_search_db.py +97 -110
  208. cognee/tests/test_usage_logger_e2e.py +268 -0
  209. cognee/tests/unit/api/test_get_raw_data_endpoint.py +206 -0
  210. cognee/tests/unit/eval_framework/answer_generation_test.py +4 -3
  211. cognee/tests/unit/infrastructure/databases/cache/test_cache_config.py +2 -0
  212. cognee/tests/unit/modules/graph/cognee_graph_elements_test.py +42 -2
  213. cognee/tests/unit/modules/graph/cognee_graph_test.py +329 -31
  214. cognee/tests/unit/modules/retrieval/chunks_retriever_test.py +31 -59
  215. cognee/tests/unit/modules/retrieval/graph_completion_retriever_context_extension_test.py +70 -33
  216. cognee/tests/unit/modules/retrieval/graph_completion_retriever_cot_test.py +72 -52
  217. cognee/tests/unit/modules/retrieval/graph_completion_retriever_test.py +27 -33
  218. cognee/tests/unit/modules/retrieval/rag_completion_retriever_test.py +28 -15
  219. cognee/tests/unit/modules/retrieval/summaries_retriever_test.py +37 -42
  220. cognee/tests/unit/modules/retrieval/temporal_retriever_test.py +48 -64
  221. cognee/tests/unit/modules/retrieval/test_brute_force_triplet_search.py +263 -24
  222. cognee/tests/unit/modules/retrieval/test_node_edge_vector_search.py +273 -0
  223. cognee/tests/unit/modules/retrieval/triplet_retriever_test.py +30 -16
  224. cognee/tests/unit/modules/search/test_get_search_type_retriever_instance.py +125 -0
  225. cognee/tests/unit/modules/search/test_search.py +176 -0
  226. cognee/tests/unit/modules/search/test_search_prepare_search_result_contract.py +190 -0
  227. cognee/tests/unit/modules/users/test_tutorial_notebook_creation.py +511 -297
  228. cognee/tests/unit/shared/test_usage_logger.py +241 -0
  229. cognee/tests/unit/users/permissions/test_has_user_management_permission.py +46 -0
  230. {cognee-0.5.1.dev0.dist-info → cognee-0.5.2.dist-info}/METADATA +22 -17
  231. {cognee-0.5.1.dev0.dist-info → cognee-0.5.2.dist-info}/RECORD +235 -147
  232. cognee/api/.env.example +0 -5
  233. cognee/modules/retrieval/base_graph_retriever.py +0 -24
  234. cognee/modules/search/methods/get_search_type_tools.py +0 -223
  235. cognee/modules/search/methods/no_access_control_search.py +0 -62
  236. cognee/modules/search/utils/prepare_search_result.py +0 -63
  237. cognee/tests/test_feedback_enrichment.py +0 -174
  238. {cognee-0.5.1.dev0.dist-info → cognee-0.5.2.dist-info}/WHEEL +0 -0
  239. {cognee-0.5.1.dev0.dist-info → cognee-0.5.2.dist-info}/entry_points.txt +0 -0
  240. {cognee-0.5.1.dev0.dist-info → cognee-0.5.2.dist-info}/licenses/LICENSE +0 -0
  241. {cognee-0.5.1.dev0.dist-info → cognee-0.5.2.dist-info}/licenses/NOTICE.md +0 -0
@@ -66,6 +66,12 @@ async def test_get_context_success(mock_edge):
66
66
  mock_graph_engine = AsyncMock()
67
67
  mock_graph_engine.is_empty = AsyncMock(return_value=False)
68
68
 
69
+ mock_node1 = MagicMock()
70
+ mock_node2 = MagicMock()
71
+ mock_edge.node1 = mock_node1
72
+ mock_edge.node2 = mock_node2
73
+ mock_edge.attributes = {"text": "mock edge"}
74
+
69
75
  with (
70
76
  patch(
71
77
  "cognee.modules.retrieval.graph_completion_retriever.get_graph_engine",
@@ -76,11 +82,9 @@ async def test_get_context_success(mock_edge):
76
82
  return_value=[mock_edge],
77
83
  ),
78
84
  ):
79
- context = await retriever.get_context("test query")
85
+ context = await retriever.get_context_from_objects("test query", [mock_edge])
80
86
 
81
- assert isinstance(context, list)
82
- assert len(context) == 1
83
- assert context[0] == mock_edge
87
+ assert isinstance(context, str)
84
88
 
85
89
 
86
90
  @pytest.mark.asyncio
@@ -101,9 +105,9 @@ async def test_get_context_empty_results():
101
105
  return_value=[],
102
106
  ),
103
107
  ):
104
- context = await retriever.get_context("test query")
108
+ context = await retriever.get_context_from_objects("test query", [])
105
109
 
106
- assert context == []
110
+ assert context == ""
107
111
 
108
112
 
109
113
  @pytest.mark.asyncio
@@ -118,9 +122,9 @@ async def test_get_context_empty_graph():
118
122
  "cognee.modules.retrieval.graph_completion_retriever.get_graph_engine",
119
123
  return_value=mock_graph_engine,
120
124
  ):
121
- context = await retriever.get_context("test query")
125
+ context = await retriever.get_context_from_objects("test query", [])
122
126
 
123
- assert context == []
127
+ assert context == ""
124
128
 
125
129
 
126
130
  @pytest.mark.asyncio
@@ -184,21 +188,6 @@ async def test_init_none_top_k():
184
188
  assert retriever.top_k == 5 # None defaults to 5
185
189
 
186
190
 
187
- @pytest.mark.asyncio
188
- async def test_convert_retrieved_objects_to_context(mock_edge):
189
- """Test convert_retrieved_objects_to_context method."""
190
- retriever = GraphCompletionRetriever()
191
-
192
- with patch(
193
- "cognee.modules.retrieval.graph_completion_retriever.resolve_edges_to_text",
194
- return_value="Resolved text",
195
- ) as mock_resolve:
196
- result = await retriever.convert_retrieved_objects_to_context([mock_edge])
197
-
198
- assert result == "Resolved text"
199
- mock_resolve.assert_awaited_once_with([mock_edge])
200
-
201
-
202
191
  @pytest.mark.asyncio
203
192
  async def test_get_completion_without_context(mock_edge):
204
193
  """Test get_completion retrieves context when not provided."""
@@ -232,7 +221,7 @@ async def test_get_completion_without_context(mock_edge):
232
221
  mock_config.caching = False
233
222
  mock_cache_config.return_value = mock_config
234
223
 
235
- completion = await retriever.get_completion("test query")
224
+ completion = await retriever.get_completion_from_context("test query", None, None)
236
225
 
237
226
  assert isinstance(completion, list)
238
227
  assert len(completion) == 1
@@ -261,7 +250,9 @@ async def test_get_completion_with_provided_context(mock_edge):
261
250
  mock_config.caching = False
262
251
  mock_cache_config.return_value = mock_config
263
252
 
264
- completion = await retriever.get_completion("test query", context=[mock_edge])
253
+ completion = await retriever.get_completion_from_context(
254
+ "test query", None, context="mock edge"
255
+ )
265
256
 
266
257
  assert isinstance(completion, list)
267
258
  assert len(completion) == 1
@@ -274,7 +265,7 @@ async def test_get_completion_with_session(mock_edge):
274
265
  mock_graph_engine = AsyncMock()
275
266
  mock_graph_engine.is_empty = AsyncMock(return_value=False)
276
267
 
277
- retriever = GraphCompletionRetriever()
268
+ retriever = GraphCompletionRetriever(session_id="test_session")
278
269
 
279
270
  mock_user = MagicMock()
280
271
  mock_user.id = "test-user-id"
@@ -319,7 +310,7 @@ async def test_get_completion_with_session(mock_edge):
319
310
  mock_cache_config.return_value = mock_config
320
311
  mock_session_user.get.return_value = mock_user
321
312
 
322
- completion = await retriever.get_completion("test query", session_id="test_session")
313
+ completion = await retriever.get_completion_from_context("test query", None, None)
323
314
 
324
315
  assert isinstance(completion, list)
325
316
  assert len(completion) == 1
@@ -338,7 +329,7 @@ async def test_get_completion_with_response_model(mock_edge):
338
329
  mock_graph_engine = AsyncMock()
339
330
  mock_graph_engine.is_empty = AsyncMock(return_value=False)
340
331
 
341
- retriever = GraphCompletionRetriever()
332
+ retriever = GraphCompletionRetriever(response_model=TestModel)
342
333
 
343
334
  with (
344
335
  patch(
@@ -365,7 +356,7 @@ async def test_get_completion_with_response_model(mock_edge):
365
356
  mock_config.caching = False
366
357
  mock_cache_config.return_value = mock_config
367
358
 
368
- completion = await retriever.get_completion("test query", response_model=TestModel)
359
+ completion = await retriever.get_completion_from_context("test query", None, None)
369
360
 
370
361
  assert isinstance(completion, list)
371
362
  assert len(completion) == 1
@@ -405,7 +396,7 @@ async def test_get_completion_empty_context(mock_edge):
405
396
  mock_config.caching = False
406
397
  mock_cache_config.return_value = mock_config
407
398
 
408
- completion = await retriever.get_completion("test query")
399
+ completion = await retriever.get_completion_from_context("test query", None, None)
409
400
 
410
401
  assert isinstance(completion, list)
411
402
  assert len(completion) == 1
@@ -546,7 +537,7 @@ async def test_get_completion_with_save_interaction_no_completion(mock_edge):
546
537
  mock_config.caching = False
547
538
  mock_cache_config.return_value = mock_config
548
539
 
549
- completion = await retriever.get_completion("test query")
540
+ completion = await retriever.get_completion_from_context("test query", None, None)
550
541
 
551
542
  assert isinstance(completion, list)
552
543
  assert len(completion) == 1
@@ -586,7 +577,7 @@ async def test_get_completion_with_save_interaction_no_context(mock_edge):
586
577
  mock_config.caching = False
587
578
  mock_cache_config.return_value = mock_config
588
579
 
589
- completion = await retriever.get_completion("test query", context=None)
580
+ completion = await retriever.get_completion_from_context("test query", None, context=None)
590
581
 
591
582
  assert isinstance(completion, list)
592
583
  assert len(completion) == 1
@@ -640,7 +631,10 @@ async def test_get_completion_with_save_interaction_all_conditions_met(mock_edge
640
631
  mock_config.caching = False
641
632
  mock_cache_config.return_value = mock_config
642
633
 
643
- completion = await retriever.get_completion("test query", context=[mock_edge])
634
+ objects = await retriever.get_retrieved_objects("test query")
635
+ completion = await retriever.get_completion_from_context(
636
+ "test query", objects, context="mock_edge"
637
+ )
644
638
 
645
639
  assert isinstance(completion, list)
646
640
  assert len(completion) == 1
@@ -30,10 +30,13 @@ async def test_get_context_success(mock_vector_engine):
30
30
  "cognee.modules.retrieval.completion_retriever.get_vector_engine",
31
31
  return_value=mock_vector_engine,
32
32
  ):
33
- context = await retriever.get_context("test query")
33
+ objects = await retriever.get_retrieved_objects("test query")
34
+ context = await retriever.get_context_from_objects("test query", objects)
34
35
 
35
36
  assert context == "Steve Rodger\nMike Broski"
36
- mock_vector_engine.search.assert_awaited_once_with("DocumentChunk_text", "test query", limit=2)
37
+ mock_vector_engine.search.assert_awaited_once_with(
38
+ "DocumentChunk_text", "test query", limit=2, include_payload=True
39
+ )
37
40
 
38
41
 
39
42
  @pytest.mark.asyncio
@@ -48,7 +51,7 @@ async def test_get_context_collection_not_found_error(mock_vector_engine):
48
51
  return_value=mock_vector_engine,
49
52
  ):
50
53
  with pytest.raises(NoDataError, match="No data found"):
51
- await retriever.get_context("test query")
54
+ await retriever.get_retrieved_objects("test query")
52
55
 
53
56
 
54
57
  @pytest.mark.asyncio
@@ -62,7 +65,7 @@ async def test_get_context_empty_results(mock_vector_engine):
62
65
  "cognee.modules.retrieval.completion_retriever.get_vector_engine",
63
66
  return_value=mock_vector_engine,
64
67
  ):
65
- context = await retriever.get_context("test query")
68
+ context = await retriever.get_context_from_objects("test query", [])
66
69
 
67
70
  assert context == ""
68
71
 
@@ -82,10 +85,13 @@ async def test_get_context_top_k_limit(mock_vector_engine):
82
85
  "cognee.modules.retrieval.completion_retriever.get_vector_engine",
83
86
  return_value=mock_vector_engine,
84
87
  ):
85
- context = await retriever.get_context("test query")
88
+ objects = await retriever.get_retrieved_objects("test query")
89
+ context = await retriever.get_context_from_objects("test query", objects)
86
90
 
87
91
  assert context == "Chunk 0\nChunk 1"
88
- mock_vector_engine.search.assert_awaited_once_with("DocumentChunk_text", "test query", limit=2)
92
+ mock_vector_engine.search.assert_awaited_once_with(
93
+ "DocumentChunk_text", "test query", limit=2, include_payload=True
94
+ )
89
95
 
90
96
 
91
97
  @pytest.mark.asyncio
@@ -101,7 +107,8 @@ async def test_get_context_single_chunk(mock_vector_engine):
101
107
  "cognee.modules.retrieval.completion_retriever.get_vector_engine",
102
108
  return_value=mock_vector_engine,
103
109
  ):
104
- context = await retriever.get_context("test query")
110
+ objects = await retriever.get_retrieved_objects("test query")
111
+ context = await retriever.get_context_from_objects("test query", objects)
105
112
 
106
113
  assert context == "Single chunk text"
107
114
 
@@ -130,7 +137,7 @@ async def test_get_completion_without_session(mock_vector_engine):
130
137
  mock_config.caching = False
131
138
  mock_cache_config.return_value = mock_config
132
139
 
133
- completion = await retriever.get_completion("test query")
140
+ completion = await retriever.get_completion_from_context("test query", None, "")
134
141
 
135
142
  assert isinstance(completion, list)
136
143
  assert len(completion) == 1
@@ -153,7 +160,9 @@ async def test_get_completion_with_provided_context(mock_vector_engine):
153
160
  mock_config.caching = False
154
161
  mock_cache_config.return_value = mock_config
155
162
 
156
- completion = await retriever.get_completion("test query", context="Provided context")
163
+ completion = await retriever.get_completion_from_context(
164
+ "test query", None, context="Provided context"
165
+ )
157
166
 
158
167
  assert isinstance(completion, list)
159
168
  assert len(completion) == 1
@@ -167,7 +176,7 @@ async def test_get_completion_with_session(mock_vector_engine):
167
176
  mock_result.payload = {"text": "Chunk text"}
168
177
  mock_vector_engine.search.return_value = [mock_result]
169
178
 
170
- retriever = CompletionRetriever()
179
+ retriever = CompletionRetriever(session_id="test_session")
171
180
 
172
181
  mock_user = MagicMock()
173
182
  mock_user.id = "test-user-id"
@@ -200,7 +209,9 @@ async def test_get_completion_with_session(mock_vector_engine):
200
209
  mock_cache_config.return_value = mock_config
201
210
  mock_session_user.get.return_value = mock_user
202
211
 
203
- completion = await retriever.get_completion("test query", session_id="test_session")
212
+ completion = await retriever.get_completion_from_context(
213
+ "test query", [mock_result], "test"
214
+ )
204
215
 
205
216
  assert isinstance(completion, list)
206
217
  assert len(completion) == 1
@@ -234,7 +245,7 @@ async def test_get_completion_with_session_no_user_id(mock_vector_engine):
234
245
  mock_cache_config.return_value = mock_config
235
246
  mock_session_user.get.return_value = None # No user
236
247
 
237
- completion = await retriever.get_completion("test query")
248
+ completion = await retriever.get_completion_from_context("test query", None, "")
238
249
 
239
250
  assert isinstance(completion, list)
240
251
  assert len(completion) == 1
@@ -252,7 +263,7 @@ async def test_get_completion_with_response_model(mock_vector_engine):
252
263
  mock_result.payload = {"text": "Chunk text"}
253
264
  mock_vector_engine.search.return_value = [mock_result]
254
265
 
255
- retriever = CompletionRetriever()
266
+ retriever = CompletionRetriever(response_model=TestModel)
256
267
 
257
268
  with (
258
269
  patch(
@@ -269,7 +280,7 @@ async def test_get_completion_with_response_model(mock_vector_engine):
269
280
  mock_config.caching = False
270
281
  mock_cache_config.return_value = mock_config
271
282
 
272
- completion = await retriever.get_completion("test query", response_model=TestModel)
283
+ completion = await retriever.get_completion_from_context("test query", None, None)
273
284
 
274
285
  assert isinstance(completion, list)
275
286
  assert len(completion) == 1
@@ -318,4 +329,6 @@ async def test_get_context_missing_text_key(mock_vector_engine):
318
329
  return_value=mock_vector_engine,
319
330
  ):
320
331
  with pytest.raises(KeyError):
321
- await retriever.get_context("test query")
332
+ objects = await retriever.get_retrieved_objects("test query")
333
+ context = await retriever.get_context_from_objects("test query", objects)
334
+ await retriever.get_completion_from_context("test query", objects, context)
@@ -1,5 +1,6 @@
1
1
  import pytest
2
2
  from unittest.mock import AsyncMock, patch, MagicMock
3
+ from types import SimpleNamespace
3
4
 
4
5
  from cognee.modules.retrieval.summaries_retriever import SummariesRetriever
5
6
  from cognee.modules.retrieval.exceptions.exceptions import NoDataError
@@ -30,12 +31,16 @@ async def test_get_context_success(mock_vector_engine):
30
31
  "cognee.modules.retrieval.summaries_retriever.get_vector_engine",
31
32
  return_value=mock_vector_engine,
32
33
  ):
33
- context = await retriever.get_context("test query")
34
+ objects = await retriever.get_retrieved_objects("test query")
35
+ context = await retriever.get_context_from_objects("test query", objects)
36
+ completion = await retriever.get_completion_from_context("test query", objects, context)
34
37
 
35
- assert len(context) == 2
36
- assert context[0]["text"] == "S.R."
37
- assert context[1]["text"] == "M.B."
38
- mock_vector_engine.search.assert_awaited_once_with("TextSummary_text", "test query", limit=5)
38
+ assert len(completion) == 2
39
+ assert completion[0]["text"] == "S.R."
40
+ assert completion[1]["text"] == "M.B."
41
+ mock_vector_engine.search.assert_awaited_once_with(
42
+ "TextSummary_text", "test query", limit=5, include_payload=True
43
+ )
39
44
 
40
45
 
41
46
  @pytest.mark.asyncio
@@ -50,11 +55,11 @@ async def test_get_context_collection_not_found_error(mock_vector_engine):
50
55
  return_value=mock_vector_engine,
51
56
  ):
52
57
  with pytest.raises(NoDataError, match="No data found"):
53
- await retriever.get_context("test query")
58
+ await retriever.get_retrieved_objects("test query")
54
59
 
55
60
 
56
61
  @pytest.mark.asyncio
57
- async def test_get_context_empty_results(mock_vector_engine):
62
+ async def test_get_objects_empty_results(mock_vector_engine):
58
63
  """Test that empty list is returned when no summaries are found."""
59
64
  mock_vector_engine.search.return_value = []
60
65
 
@@ -64,13 +69,13 @@ async def test_get_context_empty_results(mock_vector_engine):
64
69
  "cognee.modules.retrieval.summaries_retriever.get_vector_engine",
65
70
  return_value=mock_vector_engine,
66
71
  ):
67
- context = await retriever.get_context("test query")
72
+ objects = await retriever.get_retrieved_objects("test query")
68
73
 
69
- assert context == []
74
+ assert objects == []
70
75
 
71
76
 
72
77
  @pytest.mark.asyncio
73
- async def test_get_context_top_k_limit(mock_vector_engine):
78
+ async def test_get_objects_top_k_limit(mock_vector_engine):
74
79
  """Test that top_k parameter limits the number of results."""
75
80
  mock_results = [MagicMock() for _ in range(3)]
76
81
  for i, result in enumerate(mock_results):
@@ -84,21 +89,25 @@ async def test_get_context_top_k_limit(mock_vector_engine):
84
89
  "cognee.modules.retrieval.summaries_retriever.get_vector_engine",
85
90
  return_value=mock_vector_engine,
86
91
  ):
87
- context = await retriever.get_context("test query")
92
+ objects = await retriever.get_retrieved_objects("test query")
88
93
 
89
- assert len(context) == 3
90
- mock_vector_engine.search.assert_awaited_once_with("TextSummary_text", "test query", limit=3)
94
+ assert len(objects) == 3
95
+ mock_vector_engine.search.assert_awaited_once_with(
96
+ "TextSummary_text", "test query", limit=3, include_payload=True
97
+ )
91
98
 
92
99
 
93
100
  @pytest.mark.asyncio
94
- async def test_get_completion_with_context(mock_vector_engine):
101
+ async def test_get_context_with_objects(mock_vector_engine):
95
102
  """Test get_completion returns provided context."""
96
103
  retriever = SummariesRetriever()
97
104
 
98
- provided_context = [{"text": "S.R."}, {"text": "M.B."}]
99
- completion = await retriever.get_completion("test query", context=provided_context)
105
+ provided_context = {"text": "S.R."}
106
+ sn = SimpleNamespace()
107
+ sn.payload = provided_context
108
+ completion = await retriever.get_context_from_objects("test query", retrieved_objects=[sn])
100
109
 
101
- assert completion == provided_context
110
+ assert completion == provided_context["text"]
102
111
 
103
112
 
104
113
  @pytest.mark.asyncio
@@ -114,7 +123,9 @@ async def test_get_completion_without_context(mock_vector_engine):
114
123
  "cognee.modules.retrieval.summaries_retriever.get_vector_engine",
115
124
  return_value=mock_vector_engine,
116
125
  ):
117
- completion = await retriever.get_completion("test query")
126
+ objects = await retriever.get_retrieved_objects("test query")
127
+ context = await retriever.get_context_from_objects("test query", objects)
128
+ completion = await retriever.get_completion_from_context("test query", objects, context)
118
129
 
119
130
  assert len(completion) == 1
120
131
  assert completion[0]["text"] == "S.R."
@@ -137,7 +148,7 @@ async def test_init_custom_top_k():
137
148
 
138
149
 
139
150
  @pytest.mark.asyncio
140
- async def test_get_context_empty_payload(mock_vector_engine):
151
+ async def test_get_objects_empty_payload(mock_vector_engine):
141
152
  """Test get_context handles empty payload."""
142
153
  mock_result = MagicMock()
143
154
  mock_result.payload = {}
@@ -150,10 +161,10 @@ async def test_get_context_empty_payload(mock_vector_engine):
150
161
  "cognee.modules.retrieval.summaries_retriever.get_vector_engine",
151
162
  return_value=mock_vector_engine,
152
163
  ):
153
- context = await retriever.get_context("test query")
164
+ objects = await retriever.get_retrieved_objects("test query")
154
165
 
155
- assert len(context) == 1
156
- assert context[0] == {}
166
+ assert len(objects) == 1
167
+ assert objects[0].payload == {}
157
168
 
158
169
 
159
170
  @pytest.mark.asyncio
@@ -163,31 +174,15 @@ async def test_get_completion_with_session_id(mock_vector_engine):
163
174
  mock_result.payload = {"text": "S.R."}
164
175
  mock_vector_engine.search.return_value = [mock_result]
165
176
 
166
- retriever = SummariesRetriever()
177
+ retriever = SummariesRetriever(session_id="test_session")
167
178
 
168
179
  with patch(
169
180
  "cognee.modules.retrieval.summaries_retriever.get_vector_engine",
170
181
  return_value=mock_vector_engine,
171
182
  ):
172
- completion = await retriever.get_completion("test query", session_id="test_session")
183
+ objects = await retriever.get_retrieved_objects("test query")
184
+ context = await retriever.get_context_from_objects("test query", objects)
185
+ completion = await retriever.get_completion_from_context("test query", objects, context)
173
186
 
174
187
  assert len(completion) == 1
175
188
  assert completion[0]["text"] == "S.R."
176
-
177
-
178
- @pytest.mark.asyncio
179
- async def test_get_completion_with_kwargs(mock_vector_engine):
180
- """Test get_completion accepts additional kwargs."""
181
- mock_result = MagicMock()
182
- mock_result.payload = {"text": "S.R."}
183
- mock_vector_engine.search.return_value = [mock_result]
184
-
185
- retriever = SummariesRetriever()
186
-
187
- with patch(
188
- "cognee.modules.retrieval.summaries_retriever.get_vector_engine",
189
- return_value=mock_vector_engine,
190
- ):
191
- completion = await retriever.get_completion("test query", extra_param="value")
192
-
193
- assert len(completion) == 1