cognee 0.5.1__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 (265) 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/add.py +2 -1
  23. cognee/api/v1/add/routers/get_add_router.py +2 -0
  24. cognee/api/v1/cognify/cognify.py +11 -6
  25. cognee/api/v1/cognify/routers/get_cognify_router.py +8 -0
  26. cognee/api/v1/config/config.py +60 -0
  27. cognee/api/v1/datasets/routers/get_datasets_router.py +46 -3
  28. cognee/api/v1/memify/routers/get_memify_router.py +3 -0
  29. cognee/api/v1/search/routers/get_search_router.py +21 -6
  30. cognee/api/v1/search/search.py +21 -5
  31. cognee/api/v1/sync/routers/get_sync_router.py +3 -3
  32. cognee/cli/commands/add_command.py +1 -1
  33. cognee/cli/commands/cognify_command.py +6 -0
  34. cognee/cli/commands/config_command.py +1 -1
  35. cognee/context_global_variables.py +5 -1
  36. cognee/eval_framework/answer_generation/answer_generation_executor.py +7 -8
  37. cognee/infrastructure/databases/cache/cache_db_interface.py +38 -1
  38. cognee/infrastructure/databases/cache/config.py +6 -0
  39. cognee/infrastructure/databases/cache/fscache/FsCacheAdapter.py +21 -0
  40. cognee/infrastructure/databases/cache/get_cache_engine.py +9 -3
  41. cognee/infrastructure/databases/cache/redis/RedisAdapter.py +60 -1
  42. cognee/infrastructure/databases/dataset_database_handler/supported_dataset_database_handlers.py +7 -0
  43. cognee/infrastructure/databases/graph/get_graph_engine.py +29 -1
  44. cognee/infrastructure/databases/graph/neo4j_driver/Neo4jAuraDevDatasetDatabaseHandler.py +62 -27
  45. cognee/infrastructure/databases/hybrid/neptune_analytics/NeptuneAnalyticsAdapter.py +17 -4
  46. cognee/infrastructure/databases/relational/config.py +16 -1
  47. cognee/infrastructure/databases/relational/create_relational_engine.py +13 -3
  48. cognee/infrastructure/databases/relational/sqlalchemy/SqlAlchemyAdapter.py +26 -3
  49. cognee/infrastructure/databases/vector/chromadb/ChromaDBAdapter.py +2 -0
  50. cognee/infrastructure/databases/vector/config.py +6 -0
  51. cognee/infrastructure/databases/vector/create_vector_engine.py +70 -16
  52. cognee/infrastructure/databases/vector/embeddings/LiteLLMEmbeddingEngine.py +64 -9
  53. cognee/infrastructure/databases/vector/embeddings/OllamaEmbeddingEngine.py +13 -2
  54. cognee/infrastructure/databases/vector/lancedb/LanceDBAdapter.py +16 -3
  55. cognee/infrastructure/databases/vector/models/ScoredResult.py +3 -3
  56. cognee/infrastructure/databases/vector/pgvector/PGVectorAdapter.py +16 -3
  57. cognee/infrastructure/databases/vector/pgvector/PGVectorDatasetDatabaseHandler.py +86 -0
  58. cognee/infrastructure/databases/vector/pgvector/create_db_and_tables.py +81 -2
  59. cognee/infrastructure/databases/vector/vector_db_interface.py +8 -0
  60. cognee/infrastructure/files/utils/get_data_file_path.py +33 -27
  61. cognee/infrastructure/llm/LLMGateway.py +0 -13
  62. cognee/infrastructure/llm/prompts/extract_query_time.txt +1 -1
  63. cognee/infrastructure/llm/prompts/generate_event_entity_prompt.txt +1 -1
  64. cognee/infrastructure/llm/prompts/generate_event_graph_prompt.txt +1 -1
  65. cognee/infrastructure/llm/prompts/generate_graph_prompt.txt +2 -2
  66. cognee/infrastructure/llm/prompts/generate_graph_prompt_guided.txt +1 -1
  67. cognee/infrastructure/llm/prompts/generate_graph_prompt_oneshot.txt +2 -2
  68. cognee/infrastructure/llm/prompts/generate_graph_prompt_simple.txt +1 -1
  69. cognee/infrastructure/llm/prompts/generate_graph_prompt_strict.txt +1 -1
  70. cognee/infrastructure/llm/prompts/search_type_selector_prompt.txt +6 -6
  71. cognee/infrastructure/llm/prompts/test.txt +1 -1
  72. cognee/infrastructure/llm/prompts/translate_content.txt +19 -0
  73. cognee/infrastructure/llm/structured_output_framework/litellm_instructor/llm/anthropic/adapter.py +17 -12
  74. cognee/infrastructure/llm/structured_output_framework/litellm_instructor/llm/gemini/adapter.py +31 -25
  75. cognee/infrastructure/llm/structured_output_framework/litellm_instructor/llm/generic_llm_api/adapter.py +132 -7
  76. cognee/infrastructure/llm/structured_output_framework/litellm_instructor/llm/get_llm_client.py +29 -5
  77. cognee/infrastructure/llm/structured_output_framework/litellm_instructor/llm/llama_cpp/adapter.py +191 -0
  78. cognee/infrastructure/llm/structured_output_framework/litellm_instructor/llm/llm_interface.py +2 -6
  79. cognee/infrastructure/llm/structured_output_framework/litellm_instructor/llm/mistral/adapter.py +58 -13
  80. cognee/infrastructure/llm/structured_output_framework/litellm_instructor/llm/ollama/adapter.py +0 -1
  81. cognee/infrastructure/llm/structured_output_framework/litellm_instructor/llm/openai/adapter.py +25 -131
  82. cognee/infrastructure/llm/structured_output_framework/litellm_instructor/llm/types.py +10 -0
  83. cognee/modules/chunking/models/DocumentChunk.py +0 -1
  84. cognee/modules/cognify/config.py +2 -0
  85. cognee/modules/data/models/Data.py +3 -1
  86. cognee/modules/engine/models/Entity.py +0 -1
  87. cognee/modules/engine/operations/setup.py +6 -0
  88. cognee/modules/graph/cognee_graph/CogneeGraph.py +150 -37
  89. cognee/modules/graph/cognee_graph/CogneeGraphElements.py +48 -2
  90. cognee/modules/graph/utils/__init__.py +1 -0
  91. cognee/modules/graph/utils/get_entity_nodes_from_triplets.py +12 -0
  92. cognee/modules/notebooks/methods/__init__.py +1 -0
  93. cognee/modules/notebooks/methods/create_notebook.py +0 -34
  94. cognee/modules/notebooks/methods/create_tutorial_notebooks.py +191 -0
  95. cognee/modules/notebooks/methods/get_notebooks.py +12 -8
  96. cognee/modules/notebooks/tutorials/cognee-basics/cell-1.md +3 -0
  97. cognee/modules/notebooks/tutorials/cognee-basics/cell-2.md +10 -0
  98. cognee/modules/notebooks/tutorials/cognee-basics/cell-3.md +7 -0
  99. cognee/modules/notebooks/tutorials/cognee-basics/cell-4.py +28 -0
  100. cognee/modules/notebooks/tutorials/cognee-basics/cell-5.py +3 -0
  101. cognee/modules/notebooks/tutorials/cognee-basics/cell-6.py +9 -0
  102. cognee/modules/notebooks/tutorials/cognee-basics/cell-7.py +17 -0
  103. cognee/modules/notebooks/tutorials/cognee-basics/config.json +4 -0
  104. cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-1.md +3 -0
  105. cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-10.md +3 -0
  106. cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-11.md +3 -0
  107. cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-12.py +3 -0
  108. cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-13.md +7 -0
  109. cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-14.py +6 -0
  110. cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-15.md +3 -0
  111. cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-16.py +7 -0
  112. cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-2.md +9 -0
  113. cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-3.md +7 -0
  114. cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-4.md +9 -0
  115. cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-5.md +5 -0
  116. cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-6.py +13 -0
  117. cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-7.md +3 -0
  118. cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-8.md +3 -0
  119. cognee/modules/notebooks/tutorials/python-development-with-cognee/cell-9.py +31 -0
  120. cognee/modules/notebooks/tutorials/python-development-with-cognee/config.json +4 -0
  121. cognee/modules/notebooks/tutorials/python-development-with-cognee/data/copilot_conversations.json +107 -0
  122. cognee/modules/notebooks/tutorials/python-development-with-cognee/data/guido_contributions.json +976 -0
  123. cognee/modules/notebooks/tutorials/python-development-with-cognee/data/my_developer_rules.md +79 -0
  124. cognee/modules/notebooks/tutorials/python-development-with-cognee/data/pep_style_guide.md +74 -0
  125. cognee/modules/notebooks/tutorials/python-development-with-cognee/data/zen_principles.md +74 -0
  126. cognee/modules/retrieval/EntityCompletionRetriever.py +51 -38
  127. cognee/modules/retrieval/__init__.py +0 -1
  128. cognee/modules/retrieval/base_retriever.py +66 -10
  129. cognee/modules/retrieval/chunks_retriever.py +57 -49
  130. cognee/modules/retrieval/coding_rules_retriever.py +12 -5
  131. cognee/modules/retrieval/completion_retriever.py +29 -28
  132. cognee/modules/retrieval/cypher_search_retriever.py +25 -20
  133. cognee/modules/retrieval/graph_completion_context_extension_retriever.py +42 -46
  134. cognee/modules/retrieval/graph_completion_cot_retriever.py +68 -51
  135. cognee/modules/retrieval/graph_completion_retriever.py +78 -63
  136. cognee/modules/retrieval/graph_summary_completion_retriever.py +2 -0
  137. cognee/modules/retrieval/lexical_retriever.py +34 -12
  138. cognee/modules/retrieval/natural_language_retriever.py +18 -15
  139. cognee/modules/retrieval/summaries_retriever.py +51 -34
  140. cognee/modules/retrieval/temporal_retriever.py +59 -49
  141. cognee/modules/retrieval/triplet_retriever.py +32 -33
  142. cognee/modules/retrieval/utils/access_tracking.py +88 -0
  143. cognee/modules/retrieval/utils/brute_force_triplet_search.py +99 -103
  144. cognee/modules/retrieval/utils/node_edge_vector_search.py +174 -0
  145. cognee/modules/search/methods/__init__.py +1 -0
  146. cognee/modules/search/methods/get_retriever_output.py +53 -0
  147. cognee/modules/search/methods/get_search_type_retriever_instance.py +252 -0
  148. cognee/modules/search/methods/search.py +90 -222
  149. cognee/modules/search/models/SearchResultPayload.py +67 -0
  150. cognee/modules/search/types/SearchResult.py +1 -8
  151. cognee/modules/search/types/SearchType.py +1 -2
  152. cognee/modules/search/types/__init__.py +1 -1
  153. cognee/modules/search/utils/__init__.py +1 -2
  154. cognee/modules/search/utils/transform_insights_to_graph.py +2 -2
  155. cognee/modules/search/utils/{transform_context_to_graph.py → transform_triplets_to_graph.py} +2 -2
  156. cognee/modules/users/authentication/default/default_transport.py +11 -1
  157. cognee/modules/users/authentication/get_api_auth_backend.py +2 -1
  158. cognee/modules/users/authentication/get_client_auth_backend.py +2 -1
  159. cognee/modules/users/methods/create_user.py +0 -9
  160. cognee/modules/users/permissions/methods/has_user_management_permission.py +29 -0
  161. cognee/modules/visualization/cognee_network_visualization.py +1 -1
  162. cognee/run_migrations.py +48 -0
  163. cognee/shared/exceptions/__init__.py +1 -3
  164. cognee/shared/exceptions/exceptions.py +11 -1
  165. cognee/shared/usage_logger.py +332 -0
  166. cognee/shared/utils.py +12 -5
  167. cognee/tasks/chunks/__init__.py +9 -0
  168. cognee/tasks/cleanup/cleanup_unused_data.py +172 -0
  169. cognee/tasks/graph/__init__.py +7 -0
  170. cognee/tasks/ingestion/data_item.py +8 -0
  171. cognee/tasks/ingestion/ingest_data.py +12 -1
  172. cognee/tasks/ingestion/save_data_item_to_storage.py +5 -0
  173. cognee/tasks/memify/__init__.py +8 -0
  174. cognee/tasks/memify/extract_usage_frequency.py +613 -0
  175. cognee/tasks/summarization/models.py +0 -2
  176. cognee/tasks/temporal_graph/__init__.py +0 -1
  177. cognee/tasks/translation/__init__.py +96 -0
  178. cognee/tasks/translation/config.py +110 -0
  179. cognee/tasks/translation/detect_language.py +190 -0
  180. cognee/tasks/translation/exceptions.py +62 -0
  181. cognee/tasks/translation/models.py +72 -0
  182. cognee/tasks/translation/providers/__init__.py +44 -0
  183. cognee/tasks/translation/providers/azure_provider.py +192 -0
  184. cognee/tasks/translation/providers/base.py +85 -0
  185. cognee/tasks/translation/providers/google_provider.py +158 -0
  186. cognee/tasks/translation/providers/llm_provider.py +143 -0
  187. cognee/tasks/translation/translate_content.py +282 -0
  188. cognee/tasks/web_scraper/default_url_crawler.py +6 -2
  189. cognee/tests/cli_tests/cli_unit_tests/test_cli_commands.py +1 -0
  190. cognee/tests/cli_tests/cli_unit_tests/test_cli_edge_cases.py +3 -0
  191. cognee/tests/integration/retrieval/test_brute_force_triplet_search_with_cognify.py +62 -0
  192. cognee/tests/integration/retrieval/test_chunks_retriever.py +351 -0
  193. cognee/tests/integration/retrieval/test_graph_completion_retriever.py +276 -0
  194. cognee/tests/integration/retrieval/test_graph_completion_retriever_context_extension.py +228 -0
  195. cognee/tests/integration/retrieval/test_graph_completion_retriever_cot.py +217 -0
  196. cognee/tests/integration/retrieval/test_rag_completion_retriever.py +319 -0
  197. cognee/tests/integration/retrieval/test_structured_output.py +258 -0
  198. cognee/tests/integration/retrieval/test_summaries_retriever.py +195 -0
  199. cognee/tests/integration/retrieval/test_temporal_retriever.py +336 -0
  200. cognee/tests/integration/retrieval/test_triplet_retriever.py +45 -1
  201. cognee/tests/integration/shared/test_usage_logger_integration.py +255 -0
  202. cognee/tests/tasks/translation/README.md +147 -0
  203. cognee/tests/tasks/translation/__init__.py +1 -0
  204. cognee/tests/tasks/translation/config_test.py +93 -0
  205. cognee/tests/tasks/translation/detect_language_test.py +118 -0
  206. cognee/tests/tasks/translation/providers_test.py +151 -0
  207. cognee/tests/tasks/translation/translate_content_test.py +213 -0
  208. cognee/tests/test_chromadb.py +1 -1
  209. cognee/tests/test_cleanup_unused_data.py +165 -0
  210. cognee/tests/test_custom_data_label.py +68 -0
  211. cognee/tests/test_delete_by_id.py +6 -6
  212. cognee/tests/test_extract_usage_frequency.py +308 -0
  213. cognee/tests/test_kuzu.py +17 -7
  214. cognee/tests/test_lancedb.py +3 -1
  215. cognee/tests/test_library.py +1 -1
  216. cognee/tests/test_neo4j.py +17 -7
  217. cognee/tests/test_neptune_analytics_vector.py +3 -1
  218. cognee/tests/test_permissions.py +172 -187
  219. cognee/tests/test_pgvector.py +3 -1
  220. cognee/tests/test_relational_db_migration.py +15 -1
  221. cognee/tests/test_remote_kuzu.py +3 -1
  222. cognee/tests/test_s3_file_storage.py +1 -1
  223. cognee/tests/test_search_db.py +345 -205
  224. cognee/tests/test_usage_logger_e2e.py +268 -0
  225. cognee/tests/unit/api/test_get_raw_data_endpoint.py +206 -0
  226. cognee/tests/unit/eval_framework/answer_generation_test.py +4 -3
  227. cognee/tests/unit/eval_framework/benchmark_adapters_test.py +25 -0
  228. cognee/tests/unit/eval_framework/corpus_builder_test.py +33 -4
  229. cognee/tests/unit/infrastructure/databases/cache/test_cache_config.py +2 -0
  230. cognee/tests/unit/infrastructure/databases/relational/test_RelationalConfig.py +69 -0
  231. cognee/tests/unit/modules/graph/cognee_graph_elements_test.py +42 -2
  232. cognee/tests/unit/modules/graph/cognee_graph_test.py +329 -31
  233. cognee/tests/unit/modules/retrieval/chunks_retriever_test.py +122 -168
  234. cognee/tests/unit/modules/retrieval/conversation_history_test.py +338 -0
  235. cognee/tests/unit/modules/retrieval/graph_completion_retriever_context_extension_test.py +486 -157
  236. cognee/tests/unit/modules/retrieval/graph_completion_retriever_cot_test.py +693 -155
  237. cognee/tests/unit/modules/retrieval/graph_completion_retriever_test.py +619 -200
  238. cognee/tests/unit/modules/retrieval/rag_completion_retriever_test.py +300 -171
  239. cognee/tests/unit/modules/retrieval/summaries_retriever_test.py +184 -155
  240. cognee/tests/unit/modules/retrieval/temporal_retriever_test.py +544 -79
  241. cognee/tests/unit/modules/retrieval/test_brute_force_triplet_search.py +476 -28
  242. cognee/tests/unit/modules/retrieval/test_completion.py +343 -0
  243. cognee/tests/unit/modules/retrieval/test_graph_summary_completion_retriever.py +157 -0
  244. cognee/tests/unit/modules/retrieval/test_node_edge_vector_search.py +273 -0
  245. cognee/tests/unit/modules/retrieval/test_user_qa_feedback.py +312 -0
  246. cognee/tests/unit/modules/retrieval/triplet_retriever_test.py +267 -7
  247. cognee/tests/unit/modules/search/test_get_search_type_retriever_instance.py +125 -0
  248. cognee/tests/unit/modules/search/test_search.py +96 -20
  249. cognee/tests/unit/modules/search/test_search_prepare_search_result_contract.py +190 -0
  250. cognee/tests/unit/modules/users/test_tutorial_notebook_creation.py +511 -297
  251. cognee/tests/unit/shared/test_usage_logger.py +241 -0
  252. cognee/tests/unit/users/permissions/test_has_user_management_permission.py +46 -0
  253. {cognee-0.5.1.dist-info → cognee-0.5.2.dist-info}/METADATA +22 -17
  254. {cognee-0.5.1.dist-info → cognee-0.5.2.dist-info}/RECORD +258 -157
  255. cognee/api/.env.example +0 -5
  256. cognee/modules/retrieval/base_graph_retriever.py +0 -24
  257. cognee/modules/search/methods/get_search_type_tools.py +0 -223
  258. cognee/modules/search/methods/no_access_control_search.py +0 -62
  259. cognee/modules/search/utils/prepare_search_result.py +0 -63
  260. cognee/tests/test_feedback_enrichment.py +0 -174
  261. cognee/tests/unit/modules/retrieval/structured_output_test.py +0 -204
  262. {cognee-0.5.1.dist-info → cognee-0.5.2.dist-info}/WHEEL +0 -0
  263. {cognee-0.5.1.dist-info → cognee-0.5.2.dist-info}/entry_points.txt +0 -0
  264. {cognee-0.5.1.dist-info → cognee-0.5.2.dist-info}/licenses/LICENSE +0 -0
  265. {cognee-0.5.1.dist-info → cognee-0.5.2.dist-info}/licenses/NOTICE.md +0 -0
@@ -0,0 +1,241 @@
1
+ """Unit tests for usage logger core functions."""
2
+
3
+ import pytest
4
+ from datetime import datetime, timezone
5
+ from uuid import UUID
6
+ from types import SimpleNamespace
7
+
8
+ from cognee.shared.usage_logger import (
9
+ _sanitize_value,
10
+ _sanitize_dict_key,
11
+ _get_param_names,
12
+ _get_param_defaults,
13
+ _extract_user_id,
14
+ _extract_parameters,
15
+ log_usage,
16
+ )
17
+ from cognee.shared.exceptions import UsageLoggerError
18
+
19
+
20
+ class TestSanitizeValue:
21
+ """Test _sanitize_value function."""
22
+
23
+ @pytest.mark.parametrize(
24
+ "value,expected",
25
+ [
26
+ (None, None),
27
+ ("string", "string"),
28
+ (42, 42),
29
+ (3.14, 3.14),
30
+ (True, True),
31
+ (False, False),
32
+ ],
33
+ )
34
+ def test_basic_types(self, value, expected):
35
+ assert _sanitize_value(value) == expected
36
+
37
+ def test_uuid_and_datetime(self):
38
+ """Test UUID and datetime serialization."""
39
+ uuid_val = UUID("123e4567-e89b-12d3-a456-426614174000")
40
+ dt = datetime(2024, 1, 15, 12, 30, 45, tzinfo=timezone.utc)
41
+
42
+ assert _sanitize_value(uuid_val) == "123e4567-e89b-12d3-a456-426614174000"
43
+ assert _sanitize_value(dt) == "2024-01-15T12:30:45+00:00"
44
+
45
+ def test_collections(self):
46
+ """Test list, tuple, and dict serialization."""
47
+ assert _sanitize_value(
48
+ [1, "string", UUID("123e4567-e89b-12d3-a456-426614174000"), None]
49
+ ) == [1, "string", "123e4567-e89b-12d3-a456-426614174000", None]
50
+ assert _sanitize_value((1, "string", True)) == [1, "string", True]
51
+ assert _sanitize_value({"key": UUID("123e4567-e89b-12d3-a456-426614174000")}) == {
52
+ "key": "123e4567-e89b-12d3-a456-426614174000"
53
+ }
54
+ assert _sanitize_value([]) == []
55
+ assert _sanitize_value({}) == {}
56
+
57
+ def test_nested_and_complex(self):
58
+ """Test nested structures and non-serializable types."""
59
+ # Nested structure
60
+ nested = {"level1": {"level2": {"level3": [1, 2, {"nested": "value"}]}}}
61
+ assert _sanitize_value(nested)["level1"]["level2"]["level3"][2]["nested"] == "value"
62
+
63
+ # Non-serializable
64
+ class CustomObject:
65
+ def __str__(self):
66
+ return "<CustomObject instance>"
67
+
68
+ result = _sanitize_value(CustomObject())
69
+ assert isinstance(result, str)
70
+ assert "<cannot be serialized" in result or "<CustomObject" in result
71
+
72
+
73
+ class TestSanitizeDictKey:
74
+ """Test _sanitize_dict_key function."""
75
+
76
+ @pytest.mark.parametrize(
77
+ "key,expected_contains",
78
+ [
79
+ ("simple_key", "simple_key"),
80
+ (UUID("123e4567-e89b-12d3-a456-426614174000"), "123e4567-e89b-12d3-a456-426614174000"),
81
+ ((1, 2, 3), ["1", "2"]),
82
+ ],
83
+ )
84
+ def test_key_types(self, key, expected_contains):
85
+ result = _sanitize_dict_key(key)
86
+ assert isinstance(result, str)
87
+ if isinstance(expected_contains, list):
88
+ assert all(item in result for item in expected_contains)
89
+ else:
90
+ assert expected_contains in result
91
+
92
+ def test_non_serializable_key(self):
93
+ class BadKey:
94
+ def __str__(self):
95
+ return "<BadKey instance>"
96
+
97
+ result = _sanitize_dict_key(BadKey())
98
+ assert isinstance(result, str)
99
+ assert "<key:" in result or "<BadKey" in result
100
+
101
+
102
+ class TestGetParamNames:
103
+ """Test _get_param_names function."""
104
+
105
+ @pytest.mark.parametrize(
106
+ "func_def,expected",
107
+ [
108
+ (lambda a, b, c: None, ["a", "b", "c"]),
109
+ (lambda a, b=42, c="default": None, ["a", "b", "c"]),
110
+ (lambda a, **kwargs: None, ["a", "kwargs"]),
111
+ (lambda *args: None, ["args"]),
112
+ ],
113
+ )
114
+ def test_param_extraction(self, func_def, expected):
115
+ assert _get_param_names(func_def) == expected
116
+
117
+ def test_async_function(self):
118
+ async def func(a, b):
119
+ pass
120
+
121
+ assert _get_param_names(func) == ["a", "b"]
122
+
123
+
124
+ class TestGetParamDefaults:
125
+ """Test _get_param_defaults function."""
126
+
127
+ @pytest.mark.parametrize(
128
+ "func_def,expected",
129
+ [
130
+ (lambda a, b=42, c="default", d=None: None, {"b": 42, "c": "default", "d": None}),
131
+ (lambda a, b, c: None, {}),
132
+ (lambda a, b=10, c="test", d=None: None, {"b": 10, "c": "test", "d": None}),
133
+ ],
134
+ )
135
+ def test_default_extraction(self, func_def, expected):
136
+ assert _get_param_defaults(func_def) == expected
137
+
138
+
139
+ class TestExtractUserId:
140
+ """Test _extract_user_id function."""
141
+
142
+ def test_user_extraction(self):
143
+ """Test extracting user_id from kwargs and args."""
144
+ user1 = SimpleNamespace(id=UUID("123e4567-e89b-12d3-a456-426614174000"))
145
+ user2 = SimpleNamespace(id="user-123")
146
+
147
+ # From kwargs
148
+ assert (
149
+ _extract_user_id((), {"user": user1}, ["user", "other"])
150
+ == "123e4567-e89b-12d3-a456-426614174000"
151
+ )
152
+ # From args
153
+ assert _extract_user_id((user2, "other"), {}, ["user", "other"]) == "user-123"
154
+ # Not present
155
+ assert _extract_user_id(("arg1",), {}, ["param1"]) is None
156
+ # None value
157
+ assert _extract_user_id((None,), {}, ["user"]) is None
158
+ # No id attribute
159
+ assert _extract_user_id((SimpleNamespace(name="test"),), {}, ["user"]) is None
160
+
161
+
162
+ class TestExtractParameters:
163
+ """Test _extract_parameters function."""
164
+
165
+ def test_parameter_extraction(self):
166
+ """Test parameter extraction with various scenarios."""
167
+
168
+ def func1(param1, param2, user=None):
169
+ pass
170
+
171
+ def func2(param1, param2=42, param3="default", user=None):
172
+ pass
173
+
174
+ def func3():
175
+ pass
176
+
177
+ def func4(param1, user):
178
+ pass
179
+
180
+ # Kwargs only
181
+ result = _extract_parameters(
182
+ (), {"param1": "v1", "param2": 42}, _get_param_names(func1), func1
183
+ )
184
+ assert result == {"param1": "v1", "param2": 42}
185
+ assert "user" not in result
186
+
187
+ # Args only
188
+ result = _extract_parameters(("v1", 42), {}, _get_param_names(func1), func1)
189
+ assert result == {"param1": "v1", "param2": 42}
190
+
191
+ # Mixed args/kwargs
192
+ result = _extract_parameters(("v1",), {"param3": "v3"}, _get_param_names(func2), func2)
193
+ assert result["param1"] == "v1" and result["param3"] == "v3"
194
+
195
+ # Defaults included
196
+ result = _extract_parameters(("v1",), {}, _get_param_names(func2), func2)
197
+ assert result["param1"] == "v1" and result["param2"] == 42 and result["param3"] == "default"
198
+
199
+ # No parameters
200
+ assert _extract_parameters((), {}, _get_param_names(func3), func3) == {}
201
+
202
+ # User excluded
203
+ user = SimpleNamespace(id="user-123")
204
+ result = _extract_parameters(("v1", user), {}, _get_param_names(func4), func4)
205
+ assert result == {"param1": "v1"} and "user" not in result
206
+
207
+ # Fallback when inspection fails
208
+ class BadFunc:
209
+ pass
210
+
211
+ result = _extract_parameters(("arg1", "arg2"), {}, [], BadFunc())
212
+ assert "arg_0" in result or "arg_1" in result
213
+
214
+
215
+ class TestDecoratorValidation:
216
+ """Test decorator validation and behavior."""
217
+
218
+ def test_decorator_validation(self):
219
+ """Test decorator validation and metadata preservation."""
220
+ # Sync function raises error
221
+ with pytest.raises(UsageLoggerError, match="requires an async function"):
222
+
223
+ @log_usage()
224
+ def sync_func():
225
+ pass
226
+
227
+ # Async function accepted
228
+ @log_usage()
229
+ async def async_func():
230
+ pass
231
+
232
+ assert callable(async_func)
233
+
234
+ # Metadata preserved
235
+ @log_usage(function_name="test_func", log_type="test")
236
+ async def test_func(param1: str, param2: int = 42):
237
+ """Test docstring."""
238
+ return param1
239
+
240
+ assert test_func.__name__ == "test_func"
241
+ assert "Test docstring" in test_func.__doc__
@@ -0,0 +1,46 @@
1
+ import pytest
2
+ from uuid import uuid4
3
+
4
+ from cognee.modules.users.permissions.methods.has_user_management_permission import (
5
+ has_user_management_permission,
6
+ )
7
+ from cognee.modules.users.exceptions import PermissionDeniedError
8
+
9
+
10
+ class FakeTenant:
11
+ def __init__(self, owner_id):
12
+ self.owner_id = owner_id
13
+
14
+
15
+ @pytest.mark.asyncio
16
+ async def test_has_user_management_permission_owner_allowed(monkeypatch):
17
+ requester_id = uuid4()
18
+ tenant_id = uuid4()
19
+
20
+ async def fake_get_tenant(_):
21
+ return FakeTenant(owner_id=requester_id)
22
+
23
+ monkeypatch.setattr(
24
+ "cognee.modules.users.permissions.methods.has_user_management_permission.get_tenant",
25
+ fake_get_tenant,
26
+ )
27
+
28
+ result = await has_user_management_permission(requester_id, tenant_id)
29
+ assert result is True
30
+
31
+
32
+ @pytest.mark.asyncio
33
+ async def test_has_user_management_permission_non_owner_denied(monkeypatch):
34
+ requester_id = uuid4()
35
+ tenant_id = uuid4()
36
+
37
+ async def fake_get_tenant(_):
38
+ return FakeTenant(owner_id=uuid4())
39
+
40
+ monkeypatch.setattr(
41
+ "cognee.modules.users.permissions.methods.has_user_management_permission.get_tenant",
42
+ fake_get_tenant,
43
+ )
44
+
45
+ with pytest.raises(PermissionDeniedError):
46
+ await has_user_management_permission(requester_id, tenant_id)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cognee
3
- Version: 0.5.1
3
+ Version: 0.5.2
4
4
  Summary: Cognee - is a library for enriching LLM context with a semantic layer for better understanding and reasoning.
5
5
  Project-URL: Homepage, https://www.cognee.ai
6
6
  Project-URL: Repository, https://github.com/topoteretes/cognee
@@ -17,10 +17,11 @@ Classifier: Operating System :: POSIX :: Linux
17
17
  Classifier: Topic :: Software Development :: Libraries
18
18
  Requires-Python: <3.14,>=3.10
19
19
  Requires-Dist: aiofiles>=23.2.1
20
- Requires-Dist: aiohttp<4.0.0,>=3.11.14
20
+ Requires-Dist: aiohttp<4.0.0,>=3.13.3
21
21
  Requires-Dist: aiolimiter>=1.2.1
22
22
  Requires-Dist: aiosqlite<1.0.0,>=0.20.0
23
23
  Requires-Dist: alembic<2,>=1.13.3
24
+ Requires-Dist: cbor2>=5.8.0
24
25
  Requires-Dist: diskcache>=5.6.3
25
26
  Requires-Dist: fakeredis[lua]>=2.32.0
26
27
  Requires-Dist: fastapi-users[sqlalchemy]<15.0.0,>=14.0.1
@@ -32,6 +33,7 @@ Requires-Dist: instructor<2.0.0,>=1.9.1
32
33
  Requires-Dist: jinja2<4,>=3.1.3
33
34
  Requires-Dist: kuzu==0.11.3
34
35
  Requires-Dist: lancedb<1.0.0,>=0.24.0
36
+ Requires-Dist: langdetect>=1.0.9
35
37
  Requires-Dist: limits<5,>=4.4.1
36
38
  Requires-Dist: litellm>=1.76.0
37
39
  Requires-Dist: mistralai>=1.9.10
@@ -41,7 +43,7 @@ Requires-Dist: numpy<=4.0.0,>=1.26.4
41
43
  Requires-Dist: onnxruntime<=1.22.1
42
44
  Requires-Dist: openai>=1.80.1
43
45
  Requires-Dist: pydantic-settings<3,>=2.2.1
44
- Requires-Dist: pydantic<2.12.0,>=2.10.5
46
+ Requires-Dist: pydantic>=2.10.5
45
47
  Requires-Dist: pylance<=0.36.0,>=0.22.0
46
48
  Requires-Dist: pympler<2.0.0,>=1.1
47
49
  Requires-Dist: pypdf<7.0.0,>=4.1.0
@@ -54,6 +56,7 @@ Requires-Dist: structlog<26,>=25.2.0
54
56
  Requires-Dist: tenacity>=9.0.0
55
57
  Requires-Dist: tiktoken<1.0.0,>=0.8.0
56
58
  Requires-Dist: typing-extensions<5.0.0,>=4.12.2
59
+ Requires-Dist: urllib3>=2.6.0
57
60
  Requires-Dist: uvicorn<1.0.0,>=0.34.0
58
61
  Requires-Dist: websockets<16.0.0,>=15.0.1
59
62
  Provides-Extra: anthropic
@@ -115,8 +118,11 @@ Requires-Dist: groq<1.0.0,>=0.8.0; extra == 'groq'
115
118
  Provides-Extra: huggingface
116
119
  Requires-Dist: transformers<5,>=4.46.3; extra == 'huggingface'
117
120
  Provides-Extra: langchain
121
+ Requires-Dist: langchain-core>=1.2.5; extra == 'langchain'
118
122
  Requires-Dist: langchain-text-splitters<1.0.0,>=0.3.2; extra == 'langchain'
119
123
  Requires-Dist: langsmith<1.0.0,>=0.2.3; extra == 'langchain'
124
+ Provides-Extra: llama-cpp
125
+ Requires-Dist: llama-cpp-python[server]<1.0.0,>=0.3.0; extra == 'llama-cpp'
120
126
  Provides-Extra: llama-index
121
127
  Requires-Dist: llama-index-core<0.13,>=0.12.11; extra == 'llama-index'
122
128
  Provides-Extra: mistral
@@ -207,7 +213,7 @@ Use your data to build personalized and dynamic memory for AI Agents. Cognee let
207
213
  <a href="https://www.readme-i18n.com/topoteretes/cognee?lang=es">Español</a> |
208
214
  <a href="https://www.readme-i18n.com/topoteretes/cognee?lang=fr">Français</a> |
209
215
  <a href="https://www.readme-i18n.com/topoteretes/cognee?lang=ja">日本語</a> |
210
- <a href="https://www.readme-i18n.com/topoteretes/cognee?lang=ko">한국어</a> |
216
+ <a href="README_ko.md">한국어</a> |
211
217
  <a href="https://www.readme-i18n.com/topoteretes/cognee?lang=pt">Português</a> |
212
218
  <a href="https://www.readme-i18n.com/topoteretes/cognee?lang=ru">Русский</a> |
213
219
  <a href="https://www.readme-i18n.com/topoteretes/cognee?lang=zh">中文</a>
@@ -219,16 +225,19 @@ Use your data to build personalized and dynamic memory for AI Agents. Cognee let
219
225
  </div>
220
226
  </div>
221
227
 
228
+
229
+
230
+
222
231
  ## About Cognee
223
232
 
224
- Cognee is an open-source tool and platform that transforms your raw data into persistent and dynamic AI memory for Agents. It combines vector search with graph databases to make your documents both searchable by meaning and connected by relationships.
233
+ Cognee is an open-source tool and platform that transforms your raw data into persistent and dynamic AI memory for Agents. It combines vector search with graph databases to make your documents both searchable by meaning and connected by relationships.
234
+ Cognee offers default memory creation and search which we describe bellow. But with Cognee you can build your own!
235
+
225
236
 
226
- You can use Cognee in two ways:
237
+ :star: _Help us reach more developers and grow the cognee community. Star this repo!_
227
238
 
228
- 1. [Self-host Cognee Open Source](https://docs.cognee.ai/getting-started/installation), which stores all data locally by default.
229
- 2. [Connect to Cognee Cloud](https://platform.cognee.ai/), and get the same OSS stack on managed infrastructure for easier development and productionization.
230
239
 
231
- ### Cognee Open Source (self-hosted):
240
+ ### Cognee Open Source:
232
241
 
233
242
  - Interconnects any type of data — including past conversations, files, images, and audio transcriptions
234
243
  - Replaces traditional RAG systems with a unified memory layer built on graphs and vectors
@@ -236,11 +245,6 @@ You can use Cognee in two ways:
236
245
  - Provides Pythonic data pipelines for ingestion from 30+ data sources
237
246
  - Offers high customizability through user-defined tasks, modular pipelines, and built-in search endpoints
238
247
 
239
- ### Cognee Cloud (managed):
240
- - Hosted web UI dashboard
241
- - Automatic version updates
242
- - Resource usage analytics
243
- - GDPR compliant, enterprise-grade security
244
248
 
245
249
  ## Basic Usage & Feature Guide
246
250
 
@@ -275,13 +279,14 @@ To integrate other LLM providers, see our [LLM Provider Documentation](https://d
275
279
 
276
280
  ### Step 3: Run the Pipeline
277
281
 
278
- Cognee will take your documents, generate a knowledge graph from them and then query the graph based on combined relationships.
282
+ Cognee will take your documents, generate a knowledge graph from them and then query the graph based on combined relationships.
279
283
 
280
284
  Now, run a minimal pipeline:
281
285
 
282
286
  ```python
283
287
  import cognee
284
288
  import asyncio
289
+ from pprint import pprint
285
290
 
286
291
 
287
292
  async def main():
@@ -299,7 +304,7 @@ async def main():
299
304
 
300
305
  # Display the results
301
306
  for result in results:
302
- print(result)
307
+ pprint(result)
303
308
 
304
309
 
305
310
  if __name__ == '__main__':
@@ -313,7 +318,7 @@ As you can see, the output is generated from the document we previously stored i
313
318
  Cognee turns documents into AI memory.
314
319
  ```
315
320
 
316
- ### Use the Cognee CLI
321
+ ### Use the Cognee CLI
317
322
 
318
323
  As an alternative, you can get started with these essential commands:
319
324