cognee 0.3.7__py3-none-any.whl → 0.3.7.dev2__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 (36) hide show
  1. cognee/api/v1/add/routers/get_add_router.py +6 -1
  2. cognee/api/v1/cognify/routers/get_cognify_router.py +2 -1
  3. cognee/api/v1/datasets/routers/get_datasets_router.py +8 -0
  4. cognee/api/v1/delete/routers/get_delete_router.py +2 -0
  5. cognee/api/v1/memify/routers/get_memify_router.py +2 -1
  6. cognee/api/v1/permissions/routers/get_permissions_router.py +6 -0
  7. cognee/api/v1/search/routers/get_search_router.py +3 -3
  8. cognee/api/v1/sync/routers/get_sync_router.py +3 -0
  9. cognee/api/v1/ui/ui.py +2 -4
  10. cognee/api/v1/update/routers/get_update_router.py +2 -0
  11. cognee/api/v1/users/routers/get_visualize_router.py +2 -0
  12. cognee/infrastructure/databases/graph/kuzu/adapter.py +9 -3
  13. cognee/infrastructure/llm/prompts/feedback_reaction_prompt.txt +14 -0
  14. cognee/infrastructure/llm/prompts/feedback_report_prompt.txt +13 -0
  15. cognee/infrastructure/llm/prompts/feedback_user_context_prompt.txt +5 -0
  16. cognee/modules/pipelines/operations/run_tasks_base.py +7 -0
  17. cognee/modules/pipelines/operations/run_tasks_with_telemetry.py +9 -1
  18. cognee/modules/retrieval/graph_completion_cot_retriever.py +137 -38
  19. cognee/modules/retrieval/utils/completion.py +25 -4
  20. cognee/modules/search/methods/search.py +17 -3
  21. cognee/shared/logging_utils.py +24 -12
  22. cognee/shared/utils.py +24 -2
  23. cognee/tasks/feedback/__init__.py +13 -0
  24. cognee/tasks/feedback/create_enrichments.py +84 -0
  25. cognee/tasks/feedback/extract_feedback_interactions.py +230 -0
  26. cognee/tasks/feedback/generate_improved_answers.py +130 -0
  27. cognee/tasks/feedback/link_enrichments_to_feedback.py +67 -0
  28. cognee/tasks/feedback/models.py +26 -0
  29. cognee/tests/test_feedback_enrichment.py +174 -0
  30. cognee/tests/unit/modules/retrieval/graph_completion_retriever_cot_test.py +51 -0
  31. {cognee-0.3.7.dist-info → cognee-0.3.7.dev2.dist-info}/METADATA +1 -1
  32. {cognee-0.3.7.dist-info → cognee-0.3.7.dev2.dist-info}/RECORD +36 -26
  33. {cognee-0.3.7.dist-info → cognee-0.3.7.dev2.dist-info}/WHEEL +0 -0
  34. {cognee-0.3.7.dist-info → cognee-0.3.7.dev2.dist-info}/entry_points.txt +0 -0
  35. {cognee-0.3.7.dist-info → cognee-0.3.7.dev2.dist-info}/licenses/LICENSE +0 -0
  36. {cognee-0.3.7.dist-info → cognee-0.3.7.dev2.dist-info}/licenses/NOTICE.md +0 -0
@@ -10,6 +10,7 @@ from cognee.modules.users.methods import get_authenticated_user
10
10
  from cognee.shared.utils import send_telemetry
11
11
  from cognee.modules.pipelines.models import PipelineRunErrored
12
12
  from cognee.shared.logging_utils import get_logger
13
+ from cognee import __version__ as cognee_version
13
14
 
14
15
  logger = get_logger()
15
16
 
@@ -63,7 +64,11 @@ def get_add_router() -> APIRouter:
63
64
  send_telemetry(
64
65
  "Add API Endpoint Invoked",
65
66
  user.id,
66
- additional_properties={"endpoint": "POST /v1/add", "node_set": node_set},
67
+ additional_properties={
68
+ "endpoint": "POST /v1/add",
69
+ "node_set": node_set,
70
+ "cognee_version": cognee_version,
71
+ },
67
72
  )
68
73
 
69
74
  from cognee.api.v1.add import add as cognee_add
@@ -29,7 +29,7 @@ from cognee.modules.pipelines.queues.pipeline_run_info_queues import (
29
29
  )
30
30
  from cognee.shared.logging_utils import get_logger
31
31
  from cognee.shared.utils import send_telemetry
32
-
32
+ from cognee import __version__ as cognee_version
33
33
 
34
34
  logger = get_logger("api.cognify")
35
35
 
@@ -98,6 +98,7 @@ def get_cognify_router() -> APIRouter:
98
98
  user.id,
99
99
  additional_properties={
100
100
  "endpoint": "POST /v1/cognify",
101
+ "cognee_version": cognee_version,
101
102
  },
102
103
  )
103
104
 
@@ -24,6 +24,7 @@ from cognee.modules.users.permissions.methods import (
24
24
  from cognee.modules.graph.methods import get_formatted_graph_data
25
25
  from cognee.modules.pipelines.models import PipelineRunStatus
26
26
  from cognee.shared.utils import send_telemetry
27
+ from cognee import __version__ as cognee_version
27
28
 
28
29
  logger = get_logger()
29
30
 
@@ -100,6 +101,7 @@ def get_datasets_router() -> APIRouter:
100
101
  user.id,
101
102
  additional_properties={
102
103
  "endpoint": "GET /v1/datasets",
104
+ "cognee_version": cognee_version,
103
105
  },
104
106
  )
105
107
 
@@ -147,6 +149,7 @@ def get_datasets_router() -> APIRouter:
147
149
  user.id,
148
150
  additional_properties={
149
151
  "endpoint": "POST /v1/datasets",
152
+ "cognee_version": cognee_version,
150
153
  },
151
154
  )
152
155
 
@@ -201,6 +204,7 @@ def get_datasets_router() -> APIRouter:
201
204
  additional_properties={
202
205
  "endpoint": f"DELETE /v1/datasets/{str(dataset_id)}",
203
206
  "dataset_id": str(dataset_id),
207
+ "cognee_version": cognee_version,
204
208
  },
205
209
  )
206
210
 
@@ -246,6 +250,7 @@ def get_datasets_router() -> APIRouter:
246
250
  "endpoint": f"DELETE /v1/datasets/{str(dataset_id)}/data/{str(data_id)}",
247
251
  "dataset_id": str(dataset_id),
248
252
  "data_id": str(data_id),
253
+ "cognee_version": cognee_version,
249
254
  },
250
255
  )
251
256
 
@@ -327,6 +332,7 @@ def get_datasets_router() -> APIRouter:
327
332
  additional_properties={
328
333
  "endpoint": f"GET /v1/datasets/{str(dataset_id)}/data",
329
334
  "dataset_id": str(dataset_id),
335
+ "cognee_version": cognee_version,
330
336
  },
331
337
  )
332
338
 
@@ -387,6 +393,7 @@ def get_datasets_router() -> APIRouter:
387
393
  additional_properties={
388
394
  "endpoint": "GET /v1/datasets/status",
389
395
  "datasets": [str(dataset_id) for dataset_id in datasets],
396
+ "cognee_version": cognee_version,
390
397
  },
391
398
  )
392
399
 
@@ -433,6 +440,7 @@ def get_datasets_router() -> APIRouter:
433
440
  "endpoint": f"GET /v1/datasets/{str(dataset_id)}/data/{str(data_id)}/raw",
434
441
  "dataset_id": str(dataset_id),
435
442
  "data_id": str(data_id),
443
+ "cognee_version": cognee_version,
436
444
  },
437
445
  )
438
446
 
@@ -6,6 +6,7 @@ from cognee.shared.logging_utils import get_logger
6
6
  from cognee.modules.users.models import User
7
7
  from cognee.modules.users.methods import get_authenticated_user
8
8
  from cognee.shared.utils import send_telemetry
9
+ from cognee import __version__ as cognee_version
9
10
 
10
11
  logger = get_logger()
11
12
 
@@ -39,6 +40,7 @@ def get_delete_router() -> APIRouter:
39
40
  "endpoint": "DELETE /v1/delete",
40
41
  "dataset_id": str(dataset_id),
41
42
  "data_id": str(data_id),
43
+ "cognee_version": cognee_version,
42
44
  },
43
45
  )
44
46
 
@@ -12,6 +12,7 @@ from cognee.modules.users.methods import get_authenticated_user
12
12
  from cognee.shared.utils import send_telemetry
13
13
  from cognee.modules.pipelines.models import PipelineRunErrored
14
14
  from cognee.shared.logging_utils import get_logger
15
+ from cognee import __version__ as cognee_version
15
16
 
16
17
  logger = get_logger()
17
18
 
@@ -73,7 +74,7 @@ def get_memify_router() -> APIRouter:
73
74
  send_telemetry(
74
75
  "Memify API Endpoint Invoked",
75
76
  user.id,
76
- additional_properties={"endpoint": "POST /v1/memify"},
77
+ additional_properties={"endpoint": "POST /v1/memify", "cognee_version": cognee_version},
77
78
  )
78
79
 
79
80
  if not payload.dataset_id and not payload.dataset_name:
@@ -7,6 +7,7 @@ from fastapi.responses import JSONResponse
7
7
  from cognee.modules.users.models import User
8
8
  from cognee.modules.users.methods import get_authenticated_user
9
9
  from cognee.shared.utils import send_telemetry
10
+ from cognee import __version__ as cognee_version
10
11
 
11
12
 
12
13
  def get_permissions_router() -> APIRouter:
@@ -48,6 +49,7 @@ def get_permissions_router() -> APIRouter:
48
49
  "endpoint": f"POST /v1/permissions/datasets/{str(principal_id)}",
49
50
  "dataset_ids": str(dataset_ids),
50
51
  "principal_id": str(principal_id),
52
+ "cognee_version": cognee_version,
51
53
  },
52
54
  )
53
55
 
@@ -89,6 +91,7 @@ def get_permissions_router() -> APIRouter:
89
91
  additional_properties={
90
92
  "endpoint": "POST /v1/permissions/roles",
91
93
  "role_name": role_name,
94
+ "cognee_version": cognee_version,
92
95
  },
93
96
  )
94
97
 
@@ -133,6 +136,7 @@ def get_permissions_router() -> APIRouter:
133
136
  "endpoint": f"POST /v1/permissions/users/{str(user_id)}/roles",
134
137
  "user_id": str(user_id),
135
138
  "role_id": str(role_id),
139
+ "cognee_version": cognee_version,
136
140
  },
137
141
  )
138
142
 
@@ -175,6 +179,7 @@ def get_permissions_router() -> APIRouter:
175
179
  "endpoint": f"POST /v1/permissions/users/{str(user_id)}/tenants",
176
180
  "user_id": str(user_id),
177
181
  "tenant_id": str(tenant_id),
182
+ "cognee_version": cognee_version,
178
183
  },
179
184
  )
180
185
 
@@ -209,6 +214,7 @@ def get_permissions_router() -> APIRouter:
209
214
  additional_properties={
210
215
  "endpoint": "POST /v1/permissions/tenants",
211
216
  "tenant_name": tenant_name,
217
+ "cognee_version": cognee_version,
212
218
  },
213
219
  )
214
220
 
@@ -13,6 +13,7 @@ from cognee.modules.users.models import User
13
13
  from cognee.modules.search.operations import get_history
14
14
  from cognee.modules.users.methods import get_authenticated_user
15
15
  from cognee.shared.utils import send_telemetry
16
+ from cognee import __version__ as cognee_version
16
17
 
17
18
 
18
19
  # Note: Datasets sent by name will only map to datasets owned by the request sender
@@ -61,9 +62,7 @@ def get_search_router() -> APIRouter:
61
62
  send_telemetry(
62
63
  "Search API Endpoint Invoked",
63
64
  user.id,
64
- additional_properties={
65
- "endpoint": "GET /v1/search",
66
- },
65
+ additional_properties={"endpoint": "GET /v1/search", "cognee_version": cognee_version},
67
66
  )
68
67
 
69
68
  try:
@@ -118,6 +117,7 @@ def get_search_router() -> APIRouter:
118
117
  "top_k": payload.top_k,
119
118
  "only_context": payload.only_context,
120
119
  "use_combined_context": payload.use_combined_context,
120
+ "cognee_version": cognee_version,
121
121
  },
122
122
  )
123
123
 
@@ -12,6 +12,7 @@ from cognee.modules.sync.methods import get_running_sync_operations_for_user, ge
12
12
  from cognee.shared.utils import send_telemetry
13
13
  from cognee.shared.logging_utils import get_logger
14
14
  from cognee.api.v1.sync import SyncResponse
15
+ from cognee import __version__ as cognee_version
15
16
  from cognee.context_global_variables import set_database_global_context_variables
16
17
 
17
18
  logger = get_logger()
@@ -99,6 +100,7 @@ def get_sync_router() -> APIRouter:
99
100
  user.id,
100
101
  additional_properties={
101
102
  "endpoint": "POST /v1/sync",
103
+ "cognee_version": cognee_version,
102
104
  "dataset_ids": [str(id) for id in request.dataset_ids]
103
105
  if request.dataset_ids
104
106
  else "*",
@@ -205,6 +207,7 @@ def get_sync_router() -> APIRouter:
205
207
  user.id,
206
208
  additional_properties={
207
209
  "endpoint": "GET /v1/sync/status",
210
+ "cognee_version": cognee_version,
208
211
  },
209
212
  )
210
213
 
cognee/api/v1/ui/ui.py CHANGED
@@ -503,7 +503,7 @@ def start_ui(
503
503
  if start_mcp:
504
504
  logger.info("Starting Cognee MCP server with Docker...")
505
505
  try:
506
- image = "cognee/cognee-mcp:feature-standalone-mcp" # TODO: change to "cognee/cognee-mcp:main" right before merging into main
506
+ image = "cognee/cognee-mcp:main"
507
507
  subprocess.run(["docker", "pull", image], check=True)
508
508
 
509
509
  import uuid
@@ -538,9 +538,7 @@ def start_ui(
538
538
  env_file = os.path.join(cwd, ".env")
539
539
  docker_cmd.extend(["--env-file", env_file])
540
540
 
541
- docker_cmd.append(
542
- image
543
- ) # TODO: change to "cognee/cognee-mcp:main" right before merging into main
541
+ docker_cmd.append(image)
544
542
 
545
543
  mcp_process = subprocess.Popen(
546
544
  docker_cmd,
@@ -9,6 +9,7 @@ from cognee.shared.logging_utils import get_logger
9
9
  from cognee.modules.users.models import User
10
10
  from cognee.modules.users.methods import get_authenticated_user
11
11
  from cognee.shared.utils import send_telemetry
12
+ from cognee import __version__ as cognee_version
12
13
  from cognee.modules.pipelines.models.PipelineRunInfo import (
13
14
  PipelineRunErrored,
14
15
  )
@@ -64,6 +65,7 @@ def get_update_router() -> APIRouter:
64
65
  "dataset_id": str(dataset_id),
65
66
  "data_id": str(data_id),
66
67
  "node_set": str(node_set),
68
+ "cognee_version": cognee_version,
67
69
  },
68
70
  )
69
71
 
@@ -8,6 +8,7 @@ from cognee.modules.users.models import User
8
8
 
9
9
  from cognee.context_global_variables import set_database_global_context_variables
10
10
  from cognee.shared.utils import send_telemetry
11
+ from cognee import __version__ as cognee_version
11
12
 
12
13
  logger = get_logger()
13
14
 
@@ -46,6 +47,7 @@ def get_visualize_router() -> APIRouter:
46
47
  additional_properties={
47
48
  "endpoint": "GET /v1/visualize",
48
49
  "dataset_id": str(dataset_id),
50
+ "cognee_version": cognee_version,
49
51
  },
50
52
  )
51
53
 
@@ -1366,9 +1366,15 @@ class KuzuAdapter(GraphDBInterface):
1366
1366
  params[param_name] = values
1367
1367
 
1368
1368
  where_clause = " AND ".join(where_clauses)
1369
- nodes_query = (
1370
- f"MATCH (n:Node) WHERE {where_clause} RETURN n.id, {{properties: n.properties}}"
1371
- )
1369
+ nodes_query = f"""
1370
+ MATCH (n:Node)
1371
+ WHERE {where_clause}
1372
+ RETURN n.id, {{
1373
+ name: n.name,
1374
+ type: n.type,
1375
+ properties: n.properties
1376
+ }}
1377
+ """
1372
1378
  edges_query = f"""
1373
1379
  MATCH (n1:Node)-[r:EDGE]->(n2:Node)
1374
1380
  WHERE {where_clause.replace("n.", "n1.")} AND {where_clause.replace("n.", "n2.")}
@@ -0,0 +1,14 @@
1
+ A question was previously answered, but the answer received negative feedback.
2
+ Please reconsider and improve the response.
3
+
4
+ Question: {question}
5
+ Context originally used: {context}
6
+ Previous answer: {wrong_answer}
7
+ Feedback on that answer: {negative_feedback}
8
+
9
+ Task: Provide a better response. The new answer should be short and direct.
10
+ Then explain briefly why this answer is better.
11
+
12
+ Format your reply as:
13
+ Answer: <improved answer>
14
+ Explanation: <short explanation>
@@ -0,0 +1,13 @@
1
+ Write a concise, stand-alone paragraph that explains the correct answer to the question below.
2
+ The paragraph should read naturally on its own, providing all necessary context and reasoning
3
+ so the answer is clear and well-supported.
4
+
5
+ Question: {question}
6
+ Correct answer: {improved_answer}
7
+ Supporting context: {new_context}
8
+
9
+ Your paragraph should:
10
+ - First sentence clearly states the correct answer as a full sentence
11
+ - Remainder flows from first sentence and provides explanation based on context
12
+ - Use simple, direct language that is easy to follow
13
+ - Use shorter sentences, no long-winded explanations
@@ -0,0 +1,5 @@
1
+ Question: {question}
2
+ Context: {context}
3
+
4
+ Provide a one paragraph human readable summary of this interaction context,
5
+ listing all the relevant facts and information in a simple and direct way.
@@ -2,6 +2,7 @@ import inspect
2
2
  from cognee.shared.logging_utils import get_logger
3
3
  from cognee.modules.users.models import User
4
4
  from cognee.shared.utils import send_telemetry
5
+ from cognee import __version__ as cognee_version
5
6
 
6
7
  from ..tasks.task import Task
7
8
 
@@ -25,6 +26,8 @@ async def handle_task(
25
26
  user_id=user.id,
26
27
  additional_properties={
27
28
  "task_name": running_task.executable.__name__,
29
+ "cognee_version": cognee_version,
30
+ "tenant_id": str(user.tenant_id) if user.tenant_id else "Single User Tenant",
28
31
  },
29
32
  )
30
33
 
@@ -46,6 +49,8 @@ async def handle_task(
46
49
  user_id=user.id,
47
50
  additional_properties={
48
51
  "task_name": running_task.executable.__name__,
52
+ "cognee_version": cognee_version,
53
+ "tenant_id": str(user.tenant_id) if user.tenant_id else "Single User Tenant",
49
54
  },
50
55
  )
51
56
  except Exception as error:
@@ -58,6 +63,8 @@ async def handle_task(
58
63
  user_id=user.id,
59
64
  additional_properties={
60
65
  "task_name": running_task.executable.__name__,
66
+ "cognee_version": cognee_version,
67
+ "tenant_id": str(user.tenant_id) if user.tenant_id else "Single User Tenant",
61
68
  },
62
69
  )
63
70
  raise error
@@ -4,6 +4,7 @@ from cognee.modules.settings import get_current_settings
4
4
  from cognee.modules.users.models import User
5
5
  from cognee.shared.logging_utils import get_logger
6
6
  from cognee.shared.utils import send_telemetry
7
+ from cognee import __version__ as cognee_version
7
8
 
8
9
  from .run_tasks_base import run_tasks_base
9
10
  from ..tasks.task import Task
@@ -26,6 +27,8 @@ async def run_tasks_with_telemetry(
26
27
  user.id,
27
28
  additional_properties={
28
29
  "pipeline_name": str(pipeline_name),
30
+ "cognee_version": cognee_version,
31
+ "tenant_id": str(user.tenant_id) if user.tenant_id else "Single User Tenant",
29
32
  }
30
33
  | config,
31
34
  )
@@ -39,7 +42,10 @@ async def run_tasks_with_telemetry(
39
42
  user.id,
40
43
  additional_properties={
41
44
  "pipeline_name": str(pipeline_name),
42
- },
45
+ "cognee_version": cognee_version,
46
+ "tenant_id": str(user.tenant_id) if user.tenant_id else "Single User Tenant",
47
+ }
48
+ | config,
43
49
  )
44
50
  except Exception as error:
45
51
  logger.error(
@@ -53,6 +59,8 @@ async def run_tasks_with_telemetry(
53
59
  user.id,
54
60
  additional_properties={
55
61
  "pipeline_name": str(pipeline_name),
62
+ "cognee_version": cognee_version,
63
+ "tenant_id": str(user.tenant_id) if user.tenant_id else "Single User Tenant",
56
64
  }
57
65
  | config,
58
66
  )