cognee 0.5.1.dev0__py3-none-any.whl → 0.5.2.dev0__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.
- cognee/__init__.py +2 -0
- cognee/alembic/README +1 -0
- cognee/alembic/env.py +107 -0
- cognee/alembic/script.py.mako +26 -0
- cognee/alembic/versions/1a58b986e6e1_enable_delete_for_old_tutorial_notebooks.py +52 -0
- cognee/alembic/versions/1d0bb7fede17_add_pipeline_run_status.py +33 -0
- cognee/alembic/versions/1daae0df1866_incremental_loading.py +48 -0
- cognee/alembic/versions/211ab850ef3d_add_sync_operations_table.py +118 -0
- cognee/alembic/versions/45957f0a9849_add_notebook_table.py +46 -0
- cognee/alembic/versions/46a6ce2bd2b2_expand_dataset_database_with_json_.py +333 -0
- cognee/alembic/versions/482cd6517ce4_add_default_user.py +30 -0
- cognee/alembic/versions/76625596c5c3_expand_dataset_database_for_multi_user.py +98 -0
- cognee/alembic/versions/8057ae7329c2_initial_migration.py +25 -0
- cognee/alembic/versions/9e7a3cb85175_loader_separation.py +104 -0
- cognee/alembic/versions/a1b2c3d4e5f6_add_label_column_to_data.py +38 -0
- cognee/alembic/versions/ab7e313804ae_permission_system_rework.py +236 -0
- cognee/alembic/versions/b9274c27a25a_kuzu_11_migration.py +75 -0
- cognee/alembic/versions/c946955da633_multi_tenant_support.py +137 -0
- cognee/alembic/versions/e1ec1dcb50b6_add_last_accessed_to_data.py +51 -0
- cognee/alembic/versions/e4ebee1091e7_expand_data_model_info.py +140 -0
- cognee/alembic.ini +117 -0
- cognee/api/v1/add/routers/get_add_router.py +2 -0
- cognee/api/v1/cognify/cognify.py +11 -6
- cognee/api/v1/cognify/routers/get_cognify_router.py +8 -0
- cognee/api/v1/config/config.py +60 -0
- cognee/api/v1/datasets/routers/get_datasets_router.py +45 -3
- cognee/api/v1/memify/routers/get_memify_router.py +2 -0
- cognee/api/v1/search/routers/get_search_router.py +21 -6
- cognee/api/v1/search/search.py +25 -5
- cognee/api/v1/sync/routers/get_sync_router.py +3 -3
- cognee/cli/commands/add_command.py +1 -1
- cognee/cli/commands/cognify_command.py +6 -0
- cognee/cli/commands/config_command.py +1 -1
- cognee/context_global_variables.py +5 -1
- cognee/eval_framework/answer_generation/answer_generation_executor.py +7 -8
- cognee/infrastructure/databases/cache/cache_db_interface.py +38 -1
- cognee/infrastructure/databases/cache/config.py +6 -0
- cognee/infrastructure/databases/cache/fscache/FsCacheAdapter.py +21 -0
- cognee/infrastructure/databases/cache/get_cache_engine.py +9 -3
- cognee/infrastructure/databases/cache/redis/RedisAdapter.py +60 -1
- cognee/infrastructure/databases/dataset_database_handler/supported_dataset_database_handlers.py +7 -0
- cognee/infrastructure/databases/graph/get_graph_engine.py +29 -1
- cognee/infrastructure/databases/graph/neo4j_driver/Neo4jAuraDevDatasetDatabaseHandler.py +62 -27
- cognee/infrastructure/databases/hybrid/neptune_analytics/NeptuneAnalyticsAdapter.py +17 -4
- cognee/infrastructure/databases/relational/sqlalchemy/SqlAlchemyAdapter.py +2 -1
- cognee/infrastructure/databases/vector/chromadb/ChromaDBAdapter.py +2 -0
- cognee/infrastructure/databases/vector/config.py +6 -0
- cognee/infrastructure/databases/vector/create_vector_engine.py +69 -22
- cognee/infrastructure/databases/vector/embeddings/LiteLLMEmbeddingEngine.py +64 -9
- cognee/infrastructure/databases/vector/embeddings/OllamaEmbeddingEngine.py +13 -2
- cognee/infrastructure/databases/vector/lancedb/LanceDBAdapter.py +16 -3
- cognee/infrastructure/databases/vector/models/ScoredResult.py +3 -3
- cognee/infrastructure/databases/vector/pgvector/PGVectorAdapter.py +16 -3
- cognee/infrastructure/databases/vector/pgvector/PGVectorDatasetDatabaseHandler.py +86 -0
- cognee/infrastructure/databases/vector/pgvector/create_db_and_tables.py +81 -2
- cognee/infrastructure/databases/vector/vector_db_interface.py +8 -0
- cognee/infrastructure/files/utils/get_data_file_path.py +33 -27
- cognee/infrastructure/llm/prompts/extract_query_time.txt +1 -1
- cognee/infrastructure/llm/prompts/generate_event_entity_prompt.txt +1 -1
- cognee/infrastructure/llm/prompts/generate_event_graph_prompt.txt +1 -1
- cognee/infrastructure/llm/prompts/generate_graph_prompt.txt +2 -2
- cognee/infrastructure/llm/prompts/generate_graph_prompt_guided.txt +1 -1
- cognee/infrastructure/llm/prompts/generate_graph_prompt_oneshot.txt +2 -2
- cognee/infrastructure/llm/prompts/generate_graph_prompt_simple.txt +1 -1
- cognee/infrastructure/llm/prompts/generate_graph_prompt_strict.txt +1 -1
- cognee/infrastructure/llm/prompts/search_type_selector_prompt.txt +6 -6
- cognee/infrastructure/llm/prompts/test.txt +1 -1
- cognee/infrastructure/llm/prompts/translate_content.txt +19 -0
- cognee/infrastructure/llm/structured_output_framework/litellm_instructor/llm/get_llm_client.py +24 -0
- cognee/infrastructure/llm/structured_output_framework/litellm_instructor/llm/llama_cpp/adapter.py +191 -0
- cognee/modules/chunking/models/DocumentChunk.py +0 -1
- cognee/modules/cognify/config.py +2 -0
- cognee/modules/data/models/Data.py +1 -0
- cognee/modules/engine/models/Entity.py +0 -1
- cognee/modules/engine/operations/setup.py +6 -0
- cognee/modules/graph/cognee_graph/CogneeGraph.py +150 -37
- cognee/modules/graph/cognee_graph/CogneeGraphElements.py +48 -2
- cognee/modules/graph/utils/__init__.py +1 -0
- cognee/modules/graph/utils/get_entity_nodes_from_triplets.py +12 -0
- cognee/modules/notebooks/methods/__init__.py +1 -0
- cognee/modules/notebooks/methods/create_notebook.py +0 -34
- cognee/modules/notebooks/methods/create_tutorial_notebooks.py +191 -0
- cognee/modules/notebooks/methods/get_notebooks.py +12 -8
- cognee/modules/notebooks/tutorials/cognee-basics/cell-1.md +3 -0
- cognee/modules/notebooks/tutorials/cognee-basics/cell-2.md +10 -0
- cognee/modules/notebooks/tutorials/cognee-basics/cell-3.md +7 -0
- cognee/modules/notebooks/tutorials/cognee-basics/cell-4.py +28 -0
- cognee/modules/notebooks/tutorials/cognee-basics/cell-5.py +3 -0
- cognee/modules/notebooks/tutorials/cognee-basics/cell-6.py +9 -0
- cognee/modules/notebooks/tutorials/cognee-basics/cell-7.py +17 -0
- cognee/modules/notebooks/tutorials/cognee-basics/config.json +4 -0
- cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-1.md +3 -0
- cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-10.md +3 -0
- cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-11.md +3 -0
- cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-12.py +3 -0
- cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-13.md +7 -0
- cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-14.py +6 -0
- cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-15.md +3 -0
- cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-16.py +7 -0
- cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-2.md +9 -0
- cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-3.md +7 -0
- cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-4.md +9 -0
- cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-5.md +5 -0
- cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-6.py +13 -0
- cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-7.md +3 -0
- cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-8.md +3 -0
- cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-9.py +31 -0
- cognee/modules/notebooks/tutorials/python-development-with-cognee/config.json +4 -0
- cognee/modules/notebooks/tutorials/python-development-with-cognee/data/copilot_conversations.json +107 -0
- cognee/modules/notebooks/tutorials/python-development-with-cognee/data/guido_contributions.json +976 -0
- cognee/modules/notebooks/tutorials/python-development-with-cognee/data/my_developer_rules.md +79 -0
- cognee/modules/notebooks/tutorials/python-development-with-cognee/data/pep_style_guide.md +74 -0
- cognee/modules/notebooks/tutorials/python-development-with-cognee/data/zen_principles.md +74 -0
- cognee/modules/retrieval/EntityCompletionRetriever.py +51 -38
- cognee/modules/retrieval/__init__.py +0 -1
- cognee/modules/retrieval/base_retriever.py +66 -10
- cognee/modules/retrieval/chunks_retriever.py +57 -49
- cognee/modules/retrieval/coding_rules_retriever.py +12 -5
- cognee/modules/retrieval/completion_retriever.py +29 -28
- cognee/modules/retrieval/cypher_search_retriever.py +25 -20
- cognee/modules/retrieval/graph_completion_context_extension_retriever.py +42 -46
- cognee/modules/retrieval/graph_completion_cot_retriever.py +68 -51
- cognee/modules/retrieval/graph_completion_retriever.py +78 -63
- cognee/modules/retrieval/graph_summary_completion_retriever.py +2 -0
- cognee/modules/retrieval/lexical_retriever.py +34 -12
- cognee/modules/retrieval/natural_language_retriever.py +18 -15
- cognee/modules/retrieval/summaries_retriever.py +51 -34
- cognee/modules/retrieval/temporal_retriever.py +59 -49
- cognee/modules/retrieval/triplet_retriever.py +31 -32
- cognee/modules/retrieval/utils/access_tracking.py +88 -0
- cognee/modules/retrieval/utils/brute_force_triplet_search.py +99 -85
- cognee/modules/retrieval/utils/node_edge_vector_search.py +174 -0
- cognee/modules/search/methods/__init__.py +1 -0
- cognee/modules/search/methods/get_retriever_output.py +53 -0
- cognee/modules/search/methods/get_search_type_retriever_instance.py +252 -0
- cognee/modules/search/methods/search.py +90 -215
- cognee/modules/search/models/SearchResultPayload.py +67 -0
- cognee/modules/search/types/SearchResult.py +1 -8
- cognee/modules/search/types/SearchType.py +1 -2
- cognee/modules/search/types/__init__.py +1 -1
- cognee/modules/search/utils/__init__.py +1 -2
- cognee/modules/search/utils/transform_insights_to_graph.py +2 -2
- cognee/modules/search/utils/{transform_context_to_graph.py → transform_triplets_to_graph.py} +2 -2
- cognee/modules/users/authentication/default/default_transport.py +11 -1
- cognee/modules/users/authentication/get_api_auth_backend.py +2 -1
- cognee/modules/users/authentication/get_client_auth_backend.py +2 -1
- cognee/modules/users/methods/create_user.py +0 -9
- cognee/modules/users/permissions/methods/has_user_management_permission.py +29 -0
- cognee/modules/visualization/cognee_network_visualization.py +1 -1
- cognee/run_migrations.py +48 -0
- cognee/shared/exceptions/__init__.py +1 -3
- cognee/shared/exceptions/exceptions.py +11 -1
- cognee/shared/usage_logger.py +332 -0
- cognee/shared/utils.py +12 -5
- cognee/tasks/cleanup/cleanup_unused_data.py +172 -0
- cognee/tasks/memify/extract_usage_frequency.py +613 -0
- cognee/tasks/summarization/models.py +0 -2
- cognee/tasks/temporal_graph/__init__.py +0 -1
- cognee/tasks/translation/__init__.py +96 -0
- cognee/tasks/translation/config.py +110 -0
- cognee/tasks/translation/detect_language.py +190 -0
- cognee/tasks/translation/exceptions.py +62 -0
- cognee/tasks/translation/models.py +72 -0
- cognee/tasks/translation/providers/__init__.py +44 -0
- cognee/tasks/translation/providers/azure_provider.py +192 -0
- cognee/tasks/translation/providers/base.py +85 -0
- cognee/tasks/translation/providers/google_provider.py +158 -0
- cognee/tasks/translation/providers/llm_provider.py +143 -0
- cognee/tasks/translation/translate_content.py +282 -0
- cognee/tasks/web_scraper/default_url_crawler.py +6 -2
- cognee/tests/cli_tests/cli_unit_tests/test_cli_commands.py +1 -0
- cognee/tests/cli_tests/cli_unit_tests/test_cli_edge_cases.py +3 -0
- cognee/tests/integration/retrieval/test_brute_force_triplet_search_with_cognify.py +62 -0
- cognee/tests/integration/retrieval/test_chunks_retriever.py +115 -16
- cognee/tests/integration/retrieval/test_graph_completion_retriever.py +13 -5
- cognee/tests/integration/retrieval/test_graph_completion_retriever_context_extension.py +22 -20
- cognee/tests/integration/retrieval/test_graph_completion_retriever_cot.py +23 -24
- cognee/tests/integration/retrieval/test_rag_completion_retriever.py +70 -5
- cognee/tests/integration/retrieval/test_structured_output.py +62 -18
- cognee/tests/integration/retrieval/test_summaries_retriever.py +20 -9
- cognee/tests/integration/retrieval/test_temporal_retriever.py +38 -8
- cognee/tests/integration/retrieval/test_triplet_retriever.py +13 -4
- cognee/tests/integration/shared/test_usage_logger_integration.py +255 -0
- cognee/tests/tasks/translation/README.md +147 -0
- cognee/tests/tasks/translation/__init__.py +1 -0
- cognee/tests/tasks/translation/config_test.py +93 -0
- cognee/tests/tasks/translation/detect_language_test.py +118 -0
- cognee/tests/tasks/translation/providers_test.py +151 -0
- cognee/tests/tasks/translation/translate_content_test.py +213 -0
- cognee/tests/test_chromadb.py +1 -1
- cognee/tests/test_cleanup_unused_data.py +165 -0
- cognee/tests/test_delete_by_id.py +6 -6
- cognee/tests/test_extract_usage_frequency.py +308 -0
- cognee/tests/test_kuzu.py +17 -7
- cognee/tests/test_lancedb.py +3 -1
- cognee/tests/test_library.py +1 -1
- cognee/tests/test_neo4j.py +17 -7
- cognee/tests/test_neptune_analytics_vector.py +3 -1
- cognee/tests/test_permissions.py +172 -187
- cognee/tests/test_pgvector.py +3 -1
- cognee/tests/test_relational_db_migration.py +15 -1
- cognee/tests/test_remote_kuzu.py +3 -1
- cognee/tests/test_s3_file_storage.py +1 -1
- cognee/tests/test_search_db.py +97 -110
- cognee/tests/test_usage_logger_e2e.py +268 -0
- cognee/tests/unit/api/test_get_raw_data_endpoint.py +206 -0
- cognee/tests/unit/eval_framework/answer_generation_test.py +4 -3
- cognee/tests/unit/infrastructure/databases/cache/test_cache_config.py +2 -0
- cognee/tests/unit/modules/graph/cognee_graph_elements_test.py +42 -2
- cognee/tests/unit/modules/graph/cognee_graph_test.py +329 -31
- cognee/tests/unit/modules/retrieval/chunks_retriever_test.py +31 -59
- cognee/tests/unit/modules/retrieval/graph_completion_retriever_context_extension_test.py +70 -33
- cognee/tests/unit/modules/retrieval/graph_completion_retriever_cot_test.py +72 -52
- cognee/tests/unit/modules/retrieval/graph_completion_retriever_test.py +27 -33
- cognee/tests/unit/modules/retrieval/rag_completion_retriever_test.py +28 -15
- cognee/tests/unit/modules/retrieval/summaries_retriever_test.py +37 -42
- cognee/tests/unit/modules/retrieval/temporal_retriever_test.py +48 -64
- cognee/tests/unit/modules/retrieval/test_brute_force_triplet_search.py +263 -24
- cognee/tests/unit/modules/retrieval/test_node_edge_vector_search.py +273 -0
- cognee/tests/unit/modules/retrieval/triplet_retriever_test.py +30 -16
- cognee/tests/unit/modules/search/test_get_search_type_retriever_instance.py +125 -0
- cognee/tests/unit/modules/search/test_search.py +176 -0
- cognee/tests/unit/modules/search/test_search_prepare_search_result_contract.py +190 -0
- cognee/tests/unit/modules/users/test_tutorial_notebook_creation.py +511 -297
- cognee/tests/unit/shared/test_usage_logger.py +241 -0
- cognee/tests/unit/users/permissions/test_has_user_management_permission.py +46 -0
- {cognee-0.5.1.dev0.dist-info → cognee-0.5.2.dev0.dist-info}/METADATA +17 -10
- {cognee-0.5.1.dev0.dist-info → cognee-0.5.2.dev0.dist-info}/RECORD +232 -144
- cognee/api/.env.example +0 -5
- cognee/modules/retrieval/base_graph_retriever.py +0 -24
- cognee/modules/search/methods/get_search_type_tools.py +0 -223
- cognee/modules/search/methods/no_access_control_search.py +0 -62
- cognee/modules/search/utils/prepare_search_result.py +0 -63
- cognee/tests/test_feedback_enrichment.py +0 -174
- {cognee-0.5.1.dev0.dist-info → cognee-0.5.2.dev0.dist-info}/WHEEL +0 -0
- {cognee-0.5.1.dev0.dist-info → cognee-0.5.2.dev0.dist-info}/entry_points.txt +0 -0
- {cognee-0.5.1.dev0.dist-info → cognee-0.5.2.dev0.dist-info}/licenses/LICENSE +0 -0
- {cognee-0.5.1.dev0.dist-info → cognee-0.5.2.dev0.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.
|
|
85
|
+
context = await retriever.get_context_from_objects("test query", [mock_edge])
|
|
80
86
|
|
|
81
|
-
assert isinstance(context,
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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(
|
|
36
|
-
assert
|
|
37
|
-
assert
|
|
38
|
-
mock_vector_engine.search.assert_awaited_once_with(
|
|
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.
|
|
58
|
+
await retriever.get_retrieved_objects("test query")
|
|
54
59
|
|
|
55
60
|
|
|
56
61
|
@pytest.mark.asyncio
|
|
57
|
-
async def
|
|
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
|
-
|
|
72
|
+
objects = await retriever.get_retrieved_objects("test query")
|
|
68
73
|
|
|
69
|
-
assert
|
|
74
|
+
assert objects == []
|
|
70
75
|
|
|
71
76
|
|
|
72
77
|
@pytest.mark.asyncio
|
|
73
|
-
async def
|
|
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
|
-
|
|
92
|
+
objects = await retriever.get_retrieved_objects("test query")
|
|
88
93
|
|
|
89
|
-
assert len(
|
|
90
|
-
mock_vector_engine.search.assert_awaited_once_with(
|
|
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
|
|
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 =
|
|
99
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
164
|
+
objects = await retriever.get_retrieved_objects("test query")
|
|
154
165
|
|
|
155
|
-
assert len(
|
|
156
|
-
assert
|
|
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
|
-
|
|
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
|