cognee 0.3.1__py3-none-any.whl → 0.3.3__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/api/v1/notebooks/routers/get_notebooks_router.py +2 -1
- cognee/api/v1/search/routers/get_search_router.py +3 -3
- cognee/api/v1/ui/ui.py +116 -21
- cognee/cli/_cognee.py +27 -18
- cognee/infrastructure/databases/relational/sqlalchemy/SqlAlchemyAdapter.py +2 -2
- cognee/infrastructure/databases/vector/config.py +1 -1
- cognee/infrastructure/utils/run_async.py +9 -4
- cognee/infrastructure/utils/run_sync.py +4 -3
- cognee/modules/notebooks/methods/create_tutorial_notebook.py +92 -0
- cognee/modules/notebooks/methods/get_notebook.py +2 -2
- cognee/modules/notebooks/methods/update_notebook.py +0 -1
- cognee/modules/notebooks/operations/run_in_local_sandbox.py +8 -5
- cognee/modules/retrieval/graph_completion_context_extension_retriever.py +2 -2
- cognee/modules/retrieval/graph_completion_cot_retriever.py +2 -2
- cognee/modules/retrieval/graph_completion_retriever.py +2 -2
- cognee/modules/retrieval/insights_retriever.py +12 -11
- cognee/modules/retrieval/temporal_retriever.py +2 -2
- cognee/modules/retrieval/user_qa_feedback.py +1 -1
- cognee/modules/search/methods/search.py +31 -8
- cognee/modules/search/utils/prepare_search_result.py +4 -4
- cognee/tests/test_permissions.py +3 -3
- cognee/tests/test_relational_db_migration.py +3 -5
- cognee/tests/test_search_db.py +10 -7
- cognee/tests/unit/modules/retrieval/graph_completion_retriever_context_extension_test.py +12 -6
- cognee/tests/unit/modules/retrieval/graph_completion_retriever_cot_test.py +12 -6
- cognee/tests/unit/modules/retrieval/insights_retriever_test.py +2 -4
- {cognee-0.3.1.dist-info → cognee-0.3.3.dist-info}/METADATA +1 -1
- {cognee-0.3.1.dist-info → cognee-0.3.3.dist-info}/RECORD +40 -39
- cognee-0.3.3.dist-info/entry_points.txt +2 -0
- cognee-0.3.1.dist-info/entry_points.txt +0 -2
- /cognee/tests/{integration/cli → cli_tests/cli_integration_tests}/__init__.py +0 -0
- /cognee/tests/{integration/cli → cli_tests/cli_integration_tests}/test_cli_integration.py +0 -0
- /cognee/tests/{unit/cli → cli_tests/cli_unit_tests}/__init__.py +0 -0
- /cognee/tests/{unit/cli → cli_tests/cli_unit_tests}/test_cli_commands.py +0 -0
- /cognee/tests/{unit/cli → cli_tests/cli_unit_tests}/test_cli_edge_cases.py +0 -0
- /cognee/tests/{unit/cli → cli_tests/cli_unit_tests}/test_cli_main.py +0 -0
- /cognee/tests/{unit/cli → cli_tests/cli_unit_tests}/test_cli_runner.py +0 -0
- /cognee/tests/{unit/cli → cli_tests/cli_unit_tests}/test_cli_utils.py +0 -0
- {cognee-0.3.1.dist-info → cognee-0.3.3.dist-info}/WHEEL +0 -0
- {cognee-0.3.1.dist-info → cognee-0.3.3.dist-info}/licenses/LICENSE +0 -0
- {cognee-0.3.1.dist-info → cognee-0.3.3.dist-info}/licenses/NOTICE.md +0 -0
|
@@ -31,7 +31,8 @@ def get_notebooks_router():
|
|
|
31
31
|
|
|
32
32
|
@router.get("")
|
|
33
33
|
async def get_notebooks_endpoint(user: User = Depends(get_authenticated_user)):
|
|
34
|
-
|
|
34
|
+
async with get_async_session() as session:
|
|
35
|
+
return await get_notebooks(user.id, session)
|
|
35
36
|
|
|
36
37
|
@router.post("")
|
|
37
38
|
async def create_notebook_endpoint(
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
from uuid import UUID
|
|
2
|
-
from typing import Optional
|
|
2
|
+
from typing import Optional, Union, List, Any
|
|
3
3
|
from datetime import datetime
|
|
4
4
|
from pydantic import Field
|
|
5
5
|
from fastapi import Depends, APIRouter
|
|
6
6
|
from fastapi.responses import JSONResponse
|
|
7
7
|
from fastapi.encoders import jsonable_encoder
|
|
8
8
|
|
|
9
|
-
from cognee.modules.search.types import SearchType
|
|
9
|
+
from cognee.modules.search.types import SearchType, SearchResult, CombinedSearchResult
|
|
10
10
|
from cognee.api.DTO import InDTO, OutDTO
|
|
11
11
|
from cognee.modules.users.exceptions.exceptions import PermissionDeniedError
|
|
12
12
|
from cognee.modules.users.models import User
|
|
@@ -73,7 +73,7 @@ def get_search_router() -> APIRouter:
|
|
|
73
73
|
except Exception as error:
|
|
74
74
|
return JSONResponse(status_code=500, content={"error": str(error)})
|
|
75
75
|
|
|
76
|
-
@router.post("", response_model=
|
|
76
|
+
@router.post("", response_model=Union[List[SearchResult], CombinedSearchResult, List])
|
|
77
77
|
async def search(payload: SearchPayloadDTO, user: User = Depends(get_authenticated_user)):
|
|
78
78
|
"""
|
|
79
79
|
Search for nodes in the graph database.
|
cognee/api/v1/ui/ui.py
CHANGED
|
@@ -7,7 +7,7 @@ import webbrowser
|
|
|
7
7
|
import zipfile
|
|
8
8
|
import requests
|
|
9
9
|
from pathlib import Path
|
|
10
|
-
from typing import Optional, Tuple
|
|
10
|
+
from typing import Callable, Optional, Tuple
|
|
11
11
|
import tempfile
|
|
12
12
|
import shutil
|
|
13
13
|
|
|
@@ -326,38 +326,93 @@ def prompt_user_for_download() -> bool:
|
|
|
326
326
|
|
|
327
327
|
|
|
328
328
|
def start_ui(
|
|
329
|
+
pid_callback: Callable[[int], None],
|
|
329
330
|
host: str = "localhost",
|
|
330
331
|
port: int = 3000,
|
|
331
332
|
open_browser: bool = True,
|
|
332
333
|
auto_download: bool = False,
|
|
334
|
+
start_backend: bool = False,
|
|
335
|
+
backend_host: str = "localhost",
|
|
336
|
+
backend_port: int = 8000,
|
|
333
337
|
) -> Optional[subprocess.Popen]:
|
|
334
338
|
"""
|
|
335
|
-
Start the cognee frontend UI server.
|
|
339
|
+
Start the cognee frontend UI server, optionally with the backend API server.
|
|
336
340
|
|
|
337
341
|
This function will:
|
|
338
|
-
1.
|
|
339
|
-
2.
|
|
340
|
-
3.
|
|
341
|
-
4.
|
|
342
|
-
5.
|
|
342
|
+
1. Optionally start the cognee backend API server
|
|
343
|
+
2. Find the cognee-frontend directory (development) or download it (pip install)
|
|
344
|
+
3. Check if Node.js and npm are available (for development mode)
|
|
345
|
+
4. Install dependencies if needed (development mode)
|
|
346
|
+
5. Start the frontend server
|
|
347
|
+
6. Optionally open the browser
|
|
343
348
|
|
|
344
349
|
Args:
|
|
345
|
-
|
|
346
|
-
|
|
350
|
+
pid_callback: Callback to notify with PID of each spawned process
|
|
351
|
+
host: Host to bind the frontend server to (default: localhost)
|
|
352
|
+
port: Port to run the frontend server on (default: 3000)
|
|
347
353
|
open_browser: Whether to open the browser automatically (default: True)
|
|
348
354
|
auto_download: If True, download frontend without prompting (default: False)
|
|
355
|
+
start_backend: If True, also start the cognee API backend server (default: False)
|
|
356
|
+
backend_host: Host to bind the backend server to (default: localhost)
|
|
357
|
+
backend_port: Port to run the backend server on (default: 8000)
|
|
349
358
|
|
|
350
359
|
Returns:
|
|
351
|
-
subprocess.Popen object representing the running server, or None if failed
|
|
360
|
+
subprocess.Popen object representing the running frontend server, or None if failed
|
|
361
|
+
Note: If backend is started, it runs in a separate process that will be cleaned up
|
|
362
|
+
when the frontend process is terminated.
|
|
352
363
|
|
|
353
364
|
Example:
|
|
354
365
|
>>> import cognee
|
|
366
|
+
>>> # Start just the frontend
|
|
355
367
|
>>> server = cognee.start_ui()
|
|
368
|
+
>>>
|
|
369
|
+
>>> # Start both frontend and backend
|
|
370
|
+
>>> server = cognee.start_ui(start_backend=True)
|
|
356
371
|
>>> # UI will be available at http://localhost:3000
|
|
357
|
-
>>> #
|
|
372
|
+
>>> # API will be available at http://localhost:8000
|
|
373
|
+
>>> # To stop both servers later:
|
|
358
374
|
>>> server.terminate()
|
|
359
375
|
"""
|
|
360
376
|
logger.info("Starting cognee UI...")
|
|
377
|
+
backend_process = None
|
|
378
|
+
|
|
379
|
+
# Start backend server if requested
|
|
380
|
+
if start_backend:
|
|
381
|
+
logger.info("Starting cognee backend API server...")
|
|
382
|
+
try:
|
|
383
|
+
import sys
|
|
384
|
+
|
|
385
|
+
backend_process = subprocess.Popen(
|
|
386
|
+
[
|
|
387
|
+
sys.executable,
|
|
388
|
+
"-m",
|
|
389
|
+
"uvicorn",
|
|
390
|
+
"cognee.api.client:app",
|
|
391
|
+
"--host",
|
|
392
|
+
backend_host,
|
|
393
|
+
"--port",
|
|
394
|
+
str(backend_port),
|
|
395
|
+
],
|
|
396
|
+
# Inherit stdout/stderr from parent process to show logs
|
|
397
|
+
stdout=None,
|
|
398
|
+
stderr=None,
|
|
399
|
+
preexec_fn=os.setsid if hasattr(os, "setsid") else None,
|
|
400
|
+
)
|
|
401
|
+
|
|
402
|
+
pid_callback(backend_process.pid)
|
|
403
|
+
|
|
404
|
+
# Give the backend a moment to start
|
|
405
|
+
time.sleep(2)
|
|
406
|
+
|
|
407
|
+
if backend_process.poll() is not None:
|
|
408
|
+
logger.error("Backend server failed to start - process exited early")
|
|
409
|
+
return None
|
|
410
|
+
|
|
411
|
+
logger.info(f"✓ Backend API started at http://{backend_host}:{backend_port}")
|
|
412
|
+
|
|
413
|
+
except Exception as e:
|
|
414
|
+
logger.error(f"Failed to start backend server: {str(e)}")
|
|
415
|
+
return None
|
|
361
416
|
|
|
362
417
|
# Find frontend directory
|
|
363
418
|
frontend_path = find_frontend_path()
|
|
@@ -406,7 +461,7 @@ def start_ui(
|
|
|
406
461
|
logger.info("This may take a moment to compile and start...")
|
|
407
462
|
|
|
408
463
|
try:
|
|
409
|
-
#
|
|
464
|
+
# Create frontend in its own process group for clean termination
|
|
410
465
|
process = subprocess.Popen(
|
|
411
466
|
["npm", "run", "dev"],
|
|
412
467
|
cwd=frontend_path,
|
|
@@ -414,11 +469,11 @@ def start_ui(
|
|
|
414
469
|
stdout=subprocess.PIPE,
|
|
415
470
|
stderr=subprocess.PIPE,
|
|
416
471
|
text=True,
|
|
417
|
-
preexec_fn=os.setsid
|
|
418
|
-
if hasattr(os, "setsid")
|
|
419
|
-
else None, # Create new process group on Unix
|
|
472
|
+
preexec_fn=os.setsid if hasattr(os, "setsid") else None,
|
|
420
473
|
)
|
|
421
474
|
|
|
475
|
+
pid_callback(process.pid)
|
|
476
|
+
|
|
422
477
|
# Give it a moment to start up
|
|
423
478
|
time.sleep(3)
|
|
424
479
|
|
|
@@ -447,16 +502,32 @@ def start_ui(
|
|
|
447
502
|
logger.info(f"✓ Open your browser to: http://{host}:{port}")
|
|
448
503
|
logger.info("✓ The UI will be available once Next.js finishes compiling")
|
|
449
504
|
|
|
505
|
+
# Store backend process reference in the frontend process for cleanup
|
|
506
|
+
if backend_process:
|
|
507
|
+
process._cognee_backend_process = backend_process
|
|
508
|
+
|
|
450
509
|
return process
|
|
451
510
|
|
|
452
511
|
except Exception as e:
|
|
453
512
|
logger.error(f"Failed to start frontend server: {str(e)}")
|
|
513
|
+
# Clean up backend process if it was started
|
|
514
|
+
if backend_process:
|
|
515
|
+
logger.info("Cleaning up backend process due to frontend failure...")
|
|
516
|
+
try:
|
|
517
|
+
backend_process.terminate()
|
|
518
|
+
backend_process.wait(timeout=5)
|
|
519
|
+
except (subprocess.TimeoutExpired, OSError, ProcessLookupError):
|
|
520
|
+
try:
|
|
521
|
+
backend_process.kill()
|
|
522
|
+
backend_process.wait()
|
|
523
|
+
except (OSError, ProcessLookupError):
|
|
524
|
+
pass
|
|
454
525
|
return None
|
|
455
526
|
|
|
456
527
|
|
|
457
528
|
def stop_ui(process: subprocess.Popen) -> bool:
|
|
458
529
|
"""
|
|
459
|
-
Stop a running UI server process and all
|
|
530
|
+
Stop a running UI server process and backend process (if started), along with all their children.
|
|
460
531
|
|
|
461
532
|
Args:
|
|
462
533
|
process: The subprocess.Popen object returned by start_ui()
|
|
@@ -467,7 +538,29 @@ def stop_ui(process: subprocess.Popen) -> bool:
|
|
|
467
538
|
if not process:
|
|
468
539
|
return False
|
|
469
540
|
|
|
541
|
+
success = True
|
|
542
|
+
|
|
470
543
|
try:
|
|
544
|
+
# First, stop the backend process if it exists
|
|
545
|
+
backend_process = getattr(process, "_cognee_backend_process", None)
|
|
546
|
+
if backend_process:
|
|
547
|
+
logger.info("Stopping backend server...")
|
|
548
|
+
try:
|
|
549
|
+
backend_process.terminate()
|
|
550
|
+
try:
|
|
551
|
+
backend_process.wait(timeout=5)
|
|
552
|
+
logger.info("Backend server stopped gracefully")
|
|
553
|
+
except subprocess.TimeoutExpired:
|
|
554
|
+
logger.warning("Backend didn't terminate gracefully, forcing kill")
|
|
555
|
+
backend_process.kill()
|
|
556
|
+
backend_process.wait()
|
|
557
|
+
logger.info("Backend server stopped")
|
|
558
|
+
except Exception as e:
|
|
559
|
+
logger.error(f"Error stopping backend server: {str(e)}")
|
|
560
|
+
success = False
|
|
561
|
+
|
|
562
|
+
# Now stop the frontend process
|
|
563
|
+
logger.info("Stopping frontend server...")
|
|
471
564
|
# Try to terminate the process group (includes child processes like Next.js)
|
|
472
565
|
if hasattr(os, "killpg"):
|
|
473
566
|
try:
|
|
@@ -484,9 +577,9 @@ def stop_ui(process: subprocess.Popen) -> bool:
|
|
|
484
577
|
|
|
485
578
|
try:
|
|
486
579
|
process.wait(timeout=10)
|
|
487
|
-
logger.info("
|
|
580
|
+
logger.info("Frontend server stopped gracefully")
|
|
488
581
|
except subprocess.TimeoutExpired:
|
|
489
|
-
logger.warning("
|
|
582
|
+
logger.warning("Frontend didn't terminate gracefully, forcing kill")
|
|
490
583
|
|
|
491
584
|
# Force kill the process group
|
|
492
585
|
if hasattr(os, "killpg"):
|
|
@@ -502,11 +595,13 @@ def stop_ui(process: subprocess.Popen) -> bool:
|
|
|
502
595
|
|
|
503
596
|
process.wait()
|
|
504
597
|
|
|
505
|
-
|
|
506
|
-
|
|
598
|
+
if success:
|
|
599
|
+
logger.info("UI servers stopped successfully")
|
|
600
|
+
|
|
601
|
+
return success
|
|
507
602
|
|
|
508
603
|
except Exception as e:
|
|
509
|
-
logger.error(f"Error stopping UI
|
|
604
|
+
logger.error(f"Error stopping UI servers: {str(e)}")
|
|
510
605
|
return False
|
|
511
606
|
|
|
512
607
|
|
cognee/cli/_cognee.py
CHANGED
|
@@ -174,30 +174,23 @@ def main() -> int:
|
|
|
174
174
|
|
|
175
175
|
# Handle UI flag
|
|
176
176
|
if hasattr(args, "start_ui") and args.start_ui:
|
|
177
|
-
|
|
177
|
+
spawned_pids = []
|
|
178
178
|
|
|
179
179
|
def signal_handler(signum, frame):
|
|
180
180
|
"""Handle Ctrl+C and other termination signals"""
|
|
181
|
-
nonlocal
|
|
181
|
+
nonlocal spawned_pids
|
|
182
182
|
fmt.echo("\nShutting down UI server...")
|
|
183
|
-
|
|
183
|
+
|
|
184
|
+
for pid in spawned_pids:
|
|
184
185
|
try:
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
# If graceful termination fails, force kill
|
|
192
|
-
fmt.echo("Force stopping UI server...")
|
|
193
|
-
server_process.kill()
|
|
194
|
-
server_process.wait()
|
|
195
|
-
fmt.success("UI server stopped.")
|
|
196
|
-
except Exception as e:
|
|
197
|
-
fmt.warning(f"Error stopping server: {e}")
|
|
186
|
+
pgid = os.getpgid(pid)
|
|
187
|
+
os.killpg(pgid, signal.SIGTERM)
|
|
188
|
+
fmt.success(f"✓ Process group {pgid} (PID {pid}) terminated.")
|
|
189
|
+
except (OSError, ProcessLookupError) as e:
|
|
190
|
+
fmt.warning(f"Could not terminate process {pid}: {e}")
|
|
191
|
+
|
|
198
192
|
sys.exit(0)
|
|
199
193
|
|
|
200
|
-
# Set up signal handlers
|
|
201
194
|
signal.signal(signal.SIGINT, signal_handler) # Ctrl+C
|
|
202
195
|
signal.signal(signal.SIGTERM, signal_handler) # Termination request
|
|
203
196
|
|
|
@@ -205,11 +198,25 @@ def main() -> int:
|
|
|
205
198
|
from cognee import start_ui
|
|
206
199
|
|
|
207
200
|
fmt.echo("Starting cognee UI...")
|
|
208
|
-
|
|
201
|
+
|
|
202
|
+
# Callback to capture PIDs of all spawned processes
|
|
203
|
+
def pid_callback(pid):
|
|
204
|
+
nonlocal spawned_pids
|
|
205
|
+
spawned_pids.append(pid)
|
|
206
|
+
|
|
207
|
+
server_process = start_ui(
|
|
208
|
+
host="localhost",
|
|
209
|
+
port=3000,
|
|
210
|
+
open_browser=True,
|
|
211
|
+
start_backend=True,
|
|
212
|
+
auto_download=True,
|
|
213
|
+
pid_callback=pid_callback,
|
|
214
|
+
)
|
|
209
215
|
|
|
210
216
|
if server_process:
|
|
211
217
|
fmt.success("UI server started successfully!")
|
|
212
218
|
fmt.echo("The interface is available at: http://localhost:3000")
|
|
219
|
+
fmt.echo("The API backend is available at: http://localhost:8000")
|
|
213
220
|
fmt.note("Press Ctrl+C to stop the server...")
|
|
214
221
|
|
|
215
222
|
try:
|
|
@@ -225,10 +232,12 @@ def main() -> int:
|
|
|
225
232
|
return 0
|
|
226
233
|
else:
|
|
227
234
|
fmt.error("Failed to start UI server. Check the logs above for details.")
|
|
235
|
+
signal_handler(signal.SIGTERM, None)
|
|
228
236
|
return 1
|
|
229
237
|
|
|
230
238
|
except Exception as ex:
|
|
231
239
|
fmt.error(f"Error starting UI: {str(ex)}")
|
|
240
|
+
signal_handler(signal.SIGTERM, None)
|
|
232
241
|
if debug.is_debug_enabled():
|
|
233
242
|
raise ex
|
|
234
243
|
return 1
|
|
@@ -39,7 +39,7 @@ class VectorConfig(BaseSettings):
|
|
|
39
39
|
values.vector_db_url = ensure_absolute_path(
|
|
40
40
|
values.vector_db_url,
|
|
41
41
|
)
|
|
42
|
-
|
|
42
|
+
elif not values.vector_db_url:
|
|
43
43
|
# Default path
|
|
44
44
|
databases_directory_path = os.path.join(base_config.system_root_directory, "databases")
|
|
45
45
|
values.vector_db_url = os.path.join(databases_directory_path, "cognee.lancedb")
|
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
import asyncio
|
|
2
2
|
from functools import partial
|
|
3
|
+
import inspect
|
|
3
4
|
|
|
4
5
|
|
|
5
6
|
async def run_async(func, *args, loop=None, executor=None, **kwargs):
|
|
6
7
|
if loop is None:
|
|
7
8
|
try:
|
|
8
|
-
|
|
9
|
+
loop = asyncio.get_running_loop()
|
|
9
10
|
except RuntimeError:
|
|
10
|
-
|
|
11
|
+
loop = asyncio.get_event_loop()
|
|
11
12
|
|
|
12
|
-
|
|
13
|
-
|
|
13
|
+
if "loop" in inspect.signature(func).parameters:
|
|
14
|
+
pfunc = partial(func, *args, loop=loop, **kwargs)
|
|
15
|
+
else:
|
|
16
|
+
pfunc = partial(func, *args, **kwargs)
|
|
17
|
+
|
|
18
|
+
return await loop.run_in_executor(executor, pfunc)
|
|
@@ -2,16 +2,17 @@ import asyncio
|
|
|
2
2
|
import threading
|
|
3
3
|
|
|
4
4
|
|
|
5
|
-
def run_sync(coro, timeout=None):
|
|
5
|
+
def run_sync(coro, running_loop=None, timeout=None):
|
|
6
6
|
result = None
|
|
7
7
|
exception = None
|
|
8
8
|
|
|
9
9
|
def runner():
|
|
10
|
-
nonlocal result, exception
|
|
10
|
+
nonlocal result, exception, running_loop
|
|
11
11
|
|
|
12
12
|
try:
|
|
13
13
|
try:
|
|
14
|
-
|
|
14
|
+
if not running_loop:
|
|
15
|
+
running_loop = asyncio.get_running_loop()
|
|
15
16
|
|
|
16
17
|
result = asyncio.run_coroutine_threadsafe(coro, running_loop).result(timeout)
|
|
17
18
|
except RuntimeError:
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
|
|
2
|
+
from uuid import UUID, uuid4
|
|
3
|
+
from sqlalchemy.ext.asyncio import AsyncSession
|
|
4
|
+
|
|
5
|
+
from ..models import NotebookCell
|
|
6
|
+
from .create_notebook import create_notebook
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
async def create_tutorial_notebook(user_id: UUID, session: AsyncSession):
|
|
10
|
+
await create_notebook(
|
|
11
|
+
user_id=user_id,
|
|
12
|
+
notebook_name="Welcome to cognee 🧠",
|
|
13
|
+
cells=[
|
|
14
|
+
NotebookCell(
|
|
15
|
+
id=uuid4(),
|
|
16
|
+
name="Welcome",
|
|
17
|
+
content="Cognee is your toolkit for turning text into a structured knowledge graph, optionally enhanced by ontologies, and then querying it with advanced retrieval techniques. This notebook will guide you through a simple example.",
|
|
18
|
+
type="markdown",
|
|
19
|
+
),
|
|
20
|
+
NotebookCell(
|
|
21
|
+
id=uuid4(),
|
|
22
|
+
name="Example",
|
|
23
|
+
content="",
|
|
24
|
+
type="markdown",
|
|
25
|
+
),
|
|
26
|
+
],
|
|
27
|
+
deletable=False,
|
|
28
|
+
session=session,
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
cell_content = [
|
|
32
|
+
"""
|
|
33
|
+
# Using Cognee with Python Development Data
|
|
34
|
+
|
|
35
|
+
Unite authoritative Python practice (Guido van Rossum's own contributions!), normative guidance (Zen/PEP 8), and your lived context (rules + conversations) into one *AI memory* that produces answers that are relevant, explainable, and consistent.
|
|
36
|
+
""",
|
|
37
|
+
|
|
38
|
+
"""
|
|
39
|
+
## What You'll Learn
|
|
40
|
+
|
|
41
|
+
In this comprehensive tutorial, you'll discover how to transform scattered development data into an intelligent knowledge system that enhances your coding workflow. By the end, you'll have:
|
|
42
|
+
- Connected disparate data sources (Guido's CPython contributions, mypy development, PEP discussions, your Python projects) into a unified AI memory graph
|
|
43
|
+
- Built an memory layer that understands Python design philosophy, best practice coding patterns, and your preferences and experience
|
|
44
|
+
- Learn how to use intelligent search capabilities that combine the diverse context
|
|
45
|
+
- Integrated everything with your coding environment through MCP (Model Context Protocol)
|
|
46
|
+
|
|
47
|
+
This tutorial demonstrates the power of **knowledge graphs** and **retrieval-augmented generation (RAG)** for software development, showing you how to build systems that learn from Python's creator and improve your own Python development.
|
|
48
|
+
""",
|
|
49
|
+
|
|
50
|
+
"""
|
|
51
|
+
## Cognee and its core operations
|
|
52
|
+
|
|
53
|
+
Before we dive in, let's understand the core Cognee operations we'll be working with:
|
|
54
|
+
- `cognee.add()` - Ingests raw data (files, text, APIs) into the system
|
|
55
|
+
- `cognee.cognify()` - Processes and structures data into a knowledge graph using AI
|
|
56
|
+
- `cognee.search()` - Queries the knowledge graph with natural language or Cypher
|
|
57
|
+
- `cognee.memify()` - Cognee's \"secret sauce\" that infers implicit connections and rules from your data
|
|
58
|
+
""",
|
|
59
|
+
|
|
60
|
+
"""
|
|
61
|
+
## Data used in this tutorial
|
|
62
|
+
|
|
63
|
+
Cognee can ingest many types of sources. In this tutorial, we use a small, concrete set of files that cover different perspectives:
|
|
64
|
+
- `guido_contributions.json` — Authoritative exemplars. Real PRs and commits from Guido van Rossum (mypy, CPython). These show how Python's creator solved problems and provide concrete anchors for patterns.
|
|
65
|
+
- `pep_style_guide.md` — Norms. Encodes community style and typing conventions (PEP 8 and related). Ensures that search results and inferred rules align with widely accepted standards.
|
|
66
|
+
- `zen_principles.md` — Philosophy. The Zen of Python. Grounds design trade-offs (simplicity, explicitness, readability) beyond syntax or mechanics.
|
|
67
|
+
- `my_developer_rules.md` — Local constraints. Your house rules, conventions, and project-specific requirements (scope, privacy, Spec.md). Keeps recommendations relevant to your actual workflow.
|
|
68
|
+
- `copilot_conversations.json` — Personal history. Transcripts of real assistant conversations, including your questions, code snippets, and discussion topics. Captures "how you code" and connects it to "how Guido codes."
|
|
69
|
+
""",
|
|
70
|
+
|
|
71
|
+
"""
|
|
72
|
+
# Preliminaries
|
|
73
|
+
|
|
74
|
+
To strike the balanace between speed, cost, anc quality, we recommend using OpenAI's `4o-mini` model; make sure your `.env` file contains this line:
|
|
75
|
+
`
|
|
76
|
+
LLM_MODEL="gpt-4o-mini"
|
|
77
|
+
`
|
|
78
|
+
""",
|
|
79
|
+
|
|
80
|
+
"""
|
|
81
|
+
import cognee
|
|
82
|
+
|
|
83
|
+
result = await cognee.add(
|
|
84
|
+
"file://data/guido_contributions.json",
|
|
85
|
+
node_set=["guido_data"]
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
await cognee.cognify(temporal_cognify=True)
|
|
89
|
+
|
|
90
|
+
results = await cognee.search("Show me commits")
|
|
91
|
+
"""
|
|
92
|
+
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from uuid import UUID
|
|
2
2
|
from typing import Optional
|
|
3
|
-
from sqlalchemy import select
|
|
3
|
+
from sqlalchemy import and_, select
|
|
4
4
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
5
5
|
|
|
6
6
|
from cognee.infrastructure.databases.relational import with_async_session
|
|
@@ -15,7 +15,7 @@ async def get_notebook(
|
|
|
15
15
|
session: AsyncSession,
|
|
16
16
|
) -> Optional[Notebook]:
|
|
17
17
|
result = await session.execute(
|
|
18
|
-
select(Notebook).where(Notebook.owner_id == user_id
|
|
18
|
+
select(Notebook).where(and_(Notebook.owner_id == user_id, Notebook.id == notebook_id))
|
|
19
19
|
)
|
|
20
20
|
|
|
21
21
|
return result.scalar()
|
|
@@ -5,16 +5,18 @@ import traceback
|
|
|
5
5
|
|
|
6
6
|
def wrap_in_async_handler(user_code: str) -> str:
|
|
7
7
|
return (
|
|
8
|
-
"
|
|
9
|
-
"
|
|
8
|
+
"import asyncio\n"
|
|
9
|
+
+ "asyncio.set_event_loop(running_loop)\n\n"
|
|
10
|
+
+ "from cognee.infrastructure.utils.run_sync import run_sync\n\n"
|
|
11
|
+
+ "async def __user_main__():\n"
|
|
10
12
|
+ "\n".join(" " + line for line in user_code.strip().split("\n"))
|
|
11
13
|
+ "\n"
|
|
12
|
-
" globals().update(locals())\n\n"
|
|
13
|
-
"run_sync(__user_main__())\n"
|
|
14
|
+
+ " globals().update(locals())\n\n"
|
|
15
|
+
+ "run_sync(__user_main__(), running_loop)\n"
|
|
14
16
|
)
|
|
15
17
|
|
|
16
18
|
|
|
17
|
-
def run_in_local_sandbox(code, environment=None):
|
|
19
|
+
def run_in_local_sandbox(code, environment=None, loop=None):
|
|
18
20
|
environment = environment or {}
|
|
19
21
|
code = wrap_in_async_handler(code.replace("\xa0", "\n"))
|
|
20
22
|
|
|
@@ -31,6 +33,7 @@ def run_in_local_sandbox(code, environment=None):
|
|
|
31
33
|
printOutput.append(output)
|
|
32
34
|
|
|
33
35
|
environment["print"] = customPrintFunction
|
|
36
|
+
environment["running_loop"] = loop
|
|
34
37
|
|
|
35
38
|
try:
|
|
36
39
|
exec(code, environment)
|
|
@@ -48,7 +48,7 @@ class GraphCompletionContextExtensionRetriever(GraphCompletionRetriever):
|
|
|
48
48
|
query: str,
|
|
49
49
|
context: Optional[List[Edge]] = None,
|
|
50
50
|
context_extension_rounds=4,
|
|
51
|
-
) -> str:
|
|
51
|
+
) -> List[str]:
|
|
52
52
|
"""
|
|
53
53
|
Extends the context for a given query by retrieving related triplets and generating new
|
|
54
54
|
completions based on them.
|
|
@@ -128,4 +128,4 @@ class GraphCompletionContextExtensionRetriever(GraphCompletionRetriever):
|
|
|
128
128
|
question=query, answer=completion, context=context_text, triplets=triplets
|
|
129
129
|
)
|
|
130
130
|
|
|
131
|
-
return completion
|
|
131
|
+
return [completion]
|
|
@@ -58,7 +58,7 @@ class GraphCompletionCotRetriever(GraphCompletionRetriever):
|
|
|
58
58
|
query: str,
|
|
59
59
|
context: Optional[List[Edge]] = None,
|
|
60
60
|
max_iter=4,
|
|
61
|
-
) -> str:
|
|
61
|
+
) -> List[str]:
|
|
62
62
|
"""
|
|
63
63
|
Generate completion responses based on a user query and contextual information.
|
|
64
64
|
|
|
@@ -138,4 +138,4 @@ class GraphCompletionCotRetriever(GraphCompletionRetriever):
|
|
|
138
138
|
question=query, answer=completion, context=context_text, triplets=triplets
|
|
139
139
|
)
|
|
140
140
|
|
|
141
|
-
return completion
|
|
141
|
+
return [completion]
|
|
@@ -135,7 +135,7 @@ class GraphCompletionRetriever(BaseGraphRetriever):
|
|
|
135
135
|
self,
|
|
136
136
|
query: str,
|
|
137
137
|
context: Optional[List[Edge]] = None,
|
|
138
|
-
) ->
|
|
138
|
+
) -> List[str]:
|
|
139
139
|
"""
|
|
140
140
|
Generates a completion using graph connections context based on a query.
|
|
141
141
|
|
|
@@ -171,7 +171,7 @@ class GraphCompletionRetriever(BaseGraphRetriever):
|
|
|
171
171
|
question=query, answer=completion, context=context_text, triplets=triplets
|
|
172
172
|
)
|
|
173
173
|
|
|
174
|
-
return completion
|
|
174
|
+
return [completion]
|
|
175
175
|
|
|
176
176
|
async def save_qa(self, question: str, answer: str, context: str, triplets: List) -> None:
|
|
177
177
|
"""
|
|
@@ -96,17 +96,18 @@ class InsightsRetriever(BaseGraphRetriever):
|
|
|
96
96
|
unique_node_connections_map[unique_id] = True
|
|
97
97
|
unique_node_connections.append(node_connection)
|
|
98
98
|
|
|
99
|
-
return
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
99
|
+
return unique_node_connections
|
|
100
|
+
# return [
|
|
101
|
+
# Edge(
|
|
102
|
+
# node1=Node(node_id=connection[0]["id"], attributes=connection[0]),
|
|
103
|
+
# node2=Node(node_id=connection[2]["id"], attributes=connection[2]),
|
|
104
|
+
# attributes={
|
|
105
|
+
# **connection[1],
|
|
106
|
+
# "relationship_type": connection[1]["relationship_name"],
|
|
107
|
+
# },
|
|
108
|
+
# )
|
|
109
|
+
# for connection in unique_node_connections
|
|
110
|
+
# ]
|
|
110
111
|
|
|
111
112
|
async def get_completion(self, query: str, context: Optional[Any] = None) -> Any:
|
|
112
113
|
"""
|
|
@@ -136,7 +136,7 @@ class TemporalRetriever(GraphCompletionRetriever):
|
|
|
136
136
|
|
|
137
137
|
return self.descriptions_to_string(top_k_events)
|
|
138
138
|
|
|
139
|
-
async def get_completion(self, query: str, context: Optional[str] = None) -> str:
|
|
139
|
+
async def get_completion(self, query: str, context: Optional[str] = None) -> List[str]:
|
|
140
140
|
"""Generates a response using the query and optional context."""
|
|
141
141
|
if not context:
|
|
142
142
|
context = await self.get_context(query=query)
|
|
@@ -149,4 +149,4 @@ class TemporalRetriever(GraphCompletionRetriever):
|
|
|
149
149
|
system_prompt_path=self.system_prompt_path,
|
|
150
150
|
)
|
|
151
151
|
|
|
152
|
-
return completion
|
|
152
|
+
return [completion]
|
|
@@ -132,14 +132,37 @@ async def search(
|
|
|
132
132
|
],
|
|
133
133
|
)
|
|
134
134
|
else:
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
135
|
+
# This is for maintaining backwards compatibility
|
|
136
|
+
if os.getenv("ENABLE_BACKEND_ACCESS_CONTROL", "false").lower() == "true":
|
|
137
|
+
return_value = []
|
|
138
|
+
for search_result in search_results:
|
|
139
|
+
result, context, datasets = search_result
|
|
140
|
+
return_value.append(
|
|
141
|
+
{
|
|
142
|
+
"search_result": result,
|
|
143
|
+
"dataset_id": datasets[0].id,
|
|
144
|
+
"dataset_name": datasets[0].name,
|
|
145
|
+
}
|
|
146
|
+
)
|
|
147
|
+
return return_value
|
|
148
|
+
else:
|
|
149
|
+
return_value = []
|
|
150
|
+
for search_result in search_results:
|
|
151
|
+
result, context, datasets = search_result
|
|
152
|
+
return_value.append(result)
|
|
153
|
+
# For maintaining backwards compatibility
|
|
154
|
+
if len(return_value) == 1 and isinstance(return_value[0], list):
|
|
155
|
+
return return_value[0]
|
|
156
|
+
else:
|
|
157
|
+
return return_value
|
|
158
|
+
# return [
|
|
159
|
+
# SearchResult(
|
|
160
|
+
# search_result=result,
|
|
161
|
+
# dataset_id=datasets[min(index, len(datasets) - 1)].id if datasets else None,
|
|
162
|
+
# dataset_name=datasets[min(index, len(datasets) - 1)].name if datasets else None,
|
|
163
|
+
# )
|
|
164
|
+
# for index, (result, _, datasets) in enumerate(search_results)
|
|
165
|
+
# ]
|
|
143
166
|
|
|
144
167
|
|
|
145
168
|
async def authorized_search(
|
|
@@ -6,7 +6,7 @@ from cognee.modules.search.utils.transform_context_to_graph import transform_con
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
async def prepare_search_result(search_result):
|
|
9
|
-
|
|
9
|
+
results, context, datasets = search_result
|
|
10
10
|
|
|
11
11
|
graphs = None
|
|
12
12
|
result_graph = None
|
|
@@ -30,11 +30,11 @@ async def prepare_search_result(search_result):
|
|
|
30
30
|
"*": "\n".join(cast(List[str], context)),
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
if isinstance(
|
|
34
|
-
result_graph = transform_context_to_graph(
|
|
33
|
+
if isinstance(results, List) and len(results) > 0 and isinstance(results[0], Edge):
|
|
34
|
+
result_graph = transform_context_to_graph(results)
|
|
35
35
|
|
|
36
36
|
return {
|
|
37
|
-
"result": result_graph or
|
|
37
|
+
"result": result_graph or results[0] if len(results) == 1 else results,
|
|
38
38
|
"graphs": graphs,
|
|
39
39
|
"context": context_texts,
|
|
40
40
|
"datasets": datasets,
|
cognee/tests/test_permissions.py
CHANGED
|
@@ -79,7 +79,7 @@ async def main():
|
|
|
79
79
|
print("\n\nExtracted sentences are:\n")
|
|
80
80
|
for result in search_results:
|
|
81
81
|
print(f"{result}\n")
|
|
82
|
-
assert search_results[0]
|
|
82
|
+
assert search_results[0]["dataset_name"] == "NLP", (
|
|
83
83
|
f"Dict must contain dataset name 'NLP': {search_results[0]}"
|
|
84
84
|
)
|
|
85
85
|
|
|
@@ -93,7 +93,7 @@ async def main():
|
|
|
93
93
|
print("\n\nExtracted sentences are:\n")
|
|
94
94
|
for result in search_results:
|
|
95
95
|
print(f"{result}\n")
|
|
96
|
-
assert search_results[0]
|
|
96
|
+
assert search_results[0]["dataset_name"] == "QUANTUM", (
|
|
97
97
|
f"Dict must contain dataset name 'QUANTUM': {search_results[0]}"
|
|
98
98
|
)
|
|
99
99
|
|
|
@@ -170,7 +170,7 @@ async def main():
|
|
|
170
170
|
for result in search_results:
|
|
171
171
|
print(f"{result}\n")
|
|
172
172
|
|
|
173
|
-
assert search_results[0]
|
|
173
|
+
assert search_results[0]["dataset_name"] == "QUANTUM", (
|
|
174
174
|
f"Dict must contain dataset name 'QUANTUM': {search_results[0]}"
|
|
175
175
|
)
|
|
176
176
|
|
|
@@ -45,15 +45,13 @@ async def relational_db_migration():
|
|
|
45
45
|
await migrate_relational_database(graph_engine, schema=schema)
|
|
46
46
|
|
|
47
47
|
# 1. Search the graph
|
|
48
|
-
search_results
|
|
48
|
+
search_results = await cognee.search(
|
|
49
49
|
query_type=SearchType.GRAPH_COMPLETION, query_text="Tell me about the artist AC/DC"
|
|
50
|
-
)
|
|
50
|
+
)
|
|
51
51
|
print("Search results:", search_results)
|
|
52
52
|
|
|
53
53
|
# 2. Assert that the search results contain "AC/DC"
|
|
54
|
-
assert any("AC/DC" in r
|
|
55
|
-
"AC/DC not found in search results!"
|
|
56
|
-
)
|
|
54
|
+
assert any("AC/DC" in r for r in search_results), "AC/DC not found in search results!"
|
|
57
55
|
|
|
58
56
|
migration_db_provider = migration_engine.engine.dialect.name
|
|
59
57
|
if migration_db_provider == "postgresql":
|
cognee/tests/test_search_db.py
CHANGED
|
@@ -144,13 +144,16 @@ async def main():
|
|
|
144
144
|
("GRAPH_COMPLETION_CONTEXT_EXTENSION", completion_ext),
|
|
145
145
|
("GRAPH_SUMMARY_COMPLETION", completion_sum),
|
|
146
146
|
]:
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
147
|
+
assert isinstance(search_results, list), f"{name}: should return a list"
|
|
148
|
+
assert len(search_results) == 1, (
|
|
149
|
+
f"{name}: expected single-element list, got {len(search_results)}"
|
|
150
|
+
)
|
|
151
|
+
text = search_results[0]
|
|
152
|
+
assert isinstance(text, str), f"{name}: element should be a string"
|
|
153
|
+
assert text.strip(), f"{name}: string should not be empty"
|
|
154
|
+
assert "netherlands" in text.lower(), (
|
|
155
|
+
f"{name}: expected 'netherlands' in result, got: {text!r}"
|
|
156
|
+
)
|
|
154
157
|
|
|
155
158
|
graph_engine = await get_graph_engine()
|
|
156
159
|
graph = await graph_engine.get_graph_data()
|
|
@@ -59,8 +59,10 @@ class TestGraphCompletionWithContextExtensionRetriever:
|
|
|
59
59
|
|
|
60
60
|
answer = await retriever.get_completion("Who works at Canva?")
|
|
61
61
|
|
|
62
|
-
assert isinstance(answer,
|
|
63
|
-
assert
|
|
62
|
+
assert isinstance(answer, list), f"Expected list, got {type(answer).__name__}"
|
|
63
|
+
assert all(isinstance(item, str) and item.strip() for item in answer), (
|
|
64
|
+
"Answer must contain only non-empty strings"
|
|
65
|
+
)
|
|
64
66
|
|
|
65
67
|
@pytest.mark.asyncio
|
|
66
68
|
async def test_graph_completion_extension_context_complex(self):
|
|
@@ -140,8 +142,10 @@ class TestGraphCompletionWithContextExtensionRetriever:
|
|
|
140
142
|
|
|
141
143
|
answer = await retriever.get_completion("Who works at Figma?")
|
|
142
144
|
|
|
143
|
-
assert isinstance(answer,
|
|
144
|
-
assert
|
|
145
|
+
assert isinstance(answer, list), f"Expected list, got {type(answer).__name__}"
|
|
146
|
+
assert all(isinstance(item, str) and item.strip() for item in answer), (
|
|
147
|
+
"Answer must contain only non-empty strings"
|
|
148
|
+
)
|
|
145
149
|
|
|
146
150
|
@pytest.mark.asyncio
|
|
147
151
|
async def test_get_graph_completion_extension_context_on_empty_graph(self):
|
|
@@ -171,5 +175,7 @@ class TestGraphCompletionWithContextExtensionRetriever:
|
|
|
171
175
|
|
|
172
176
|
answer = await retriever.get_completion("Who works at Figma?")
|
|
173
177
|
|
|
174
|
-
assert isinstance(answer,
|
|
175
|
-
assert
|
|
178
|
+
assert isinstance(answer, list), f"Expected list, got {type(answer).__name__}"
|
|
179
|
+
assert all(isinstance(item, str) and item.strip() for item in answer), (
|
|
180
|
+
"Answer must contain only non-empty strings"
|
|
181
|
+
)
|
|
@@ -55,8 +55,10 @@ class TestGraphCompletionCoTRetriever:
|
|
|
55
55
|
|
|
56
56
|
answer = await retriever.get_completion("Who works at Canva?")
|
|
57
57
|
|
|
58
|
-
assert isinstance(answer,
|
|
59
|
-
assert
|
|
58
|
+
assert isinstance(answer, list), f"Expected list, got {type(answer).__name__}"
|
|
59
|
+
assert all(isinstance(item, str) and item.strip() for item in answer), (
|
|
60
|
+
"Answer must contain only non-empty strings"
|
|
61
|
+
)
|
|
60
62
|
|
|
61
63
|
@pytest.mark.asyncio
|
|
62
64
|
async def test_graph_completion_cot_context_complex(self):
|
|
@@ -133,8 +135,10 @@ class TestGraphCompletionCoTRetriever:
|
|
|
133
135
|
|
|
134
136
|
answer = await retriever.get_completion("Who works at Figma?")
|
|
135
137
|
|
|
136
|
-
assert isinstance(answer,
|
|
137
|
-
assert
|
|
138
|
+
assert isinstance(answer, list), f"Expected list, got {type(answer).__name__}"
|
|
139
|
+
assert all(isinstance(item, str) and item.strip() for item in answer), (
|
|
140
|
+
"Answer must contain only non-empty strings"
|
|
141
|
+
)
|
|
138
142
|
|
|
139
143
|
@pytest.mark.asyncio
|
|
140
144
|
async def test_get_graph_completion_cot_context_on_empty_graph(self):
|
|
@@ -164,5 +168,7 @@ class TestGraphCompletionCoTRetriever:
|
|
|
164
168
|
|
|
165
169
|
answer = await retriever.get_completion("Who works at Figma?")
|
|
166
170
|
|
|
167
|
-
assert isinstance(answer,
|
|
168
|
-
assert
|
|
171
|
+
assert isinstance(answer, list), f"Expected list, got {type(answer).__name__}"
|
|
172
|
+
assert all(isinstance(item, str) and item.strip() for item in answer), (
|
|
173
|
+
"Answer must contain only non-empty strings"
|
|
174
|
+
)
|
|
@@ -82,7 +82,7 @@ class TestInsightsRetriever:
|
|
|
82
82
|
|
|
83
83
|
context = await retriever.get_context("Mike")
|
|
84
84
|
|
|
85
|
-
assert context[0]
|
|
85
|
+
assert context[0][0]["name"] == "Mike Broski", "Failed to get Mike Broski"
|
|
86
86
|
|
|
87
87
|
@pytest.mark.asyncio
|
|
88
88
|
async def test_insights_context_complex(self):
|
|
@@ -222,9 +222,7 @@ class TestInsightsRetriever:
|
|
|
222
222
|
|
|
223
223
|
context = await retriever.get_context("Christina")
|
|
224
224
|
|
|
225
|
-
assert context[0]
|
|
226
|
-
"Failed to get Christina Mayer"
|
|
227
|
-
)
|
|
225
|
+
assert context[0][0]["name"] == "Christina Mayer", "Failed to get Christina Mayer"
|
|
228
226
|
|
|
229
227
|
@pytest.mark.asyncio
|
|
230
228
|
async def test_insights_context_on_empty_graph(self):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cognee
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.3
|
|
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
|
|
@@ -41,7 +41,7 @@ cognee/api/v1/memify/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
|
|
|
41
41
|
cognee/api/v1/memify/routers/__init__.py,sha256=Uv25PVGhfjnNi1NYWOmOLIlzaeTlyMYF9m7BEfdu45Q,49
|
|
42
42
|
cognee/api/v1/memify/routers/get_memify_router.py,sha256=C1Cjt9D5TxhqBPmXZGNrCS4lJqPVXIJYgxZFtWVjZNs,4599
|
|
43
43
|
cognee/api/v1/notebooks/routers/__init__.py,sha256=TvQz6caluaMoXNvjbE1p_C8savypgs8rAyP5lQ8jlpc,55
|
|
44
|
-
cognee/api/v1/notebooks/routers/get_notebooks_router.py,sha256=
|
|
44
|
+
cognee/api/v1/notebooks/routers/get_notebooks_router.py,sha256=m8OH3Kw1UHF8aTP4yNuSpv7gNThE4HxmLIrUnvECYGA,3484
|
|
45
45
|
cognee/api/v1/permissions/routers/__init__.py,sha256=ljE3YnrzlMcVfThmkR5GSIxkm7sQVyibaLNtYQL4HO0,59
|
|
46
46
|
cognee/api/v1/permissions/routers/get_permissions_router.py,sha256=tqd-J__UBlstTWnQocesdjVM9JnYO5rtJhhFj-Zv1_o,8316
|
|
47
47
|
cognee/api/v1/prune/__init__.py,sha256=FEr5tTlX7wf3X4aFff6NPlVhNrPyqx7RBoJ71bJN1cY,25
|
|
@@ -56,7 +56,7 @@ cognee/api/v1/responses/routers/get_responses_router.py,sha256=ggbLhY9IXaInCgIs5
|
|
|
56
56
|
cognee/api/v1/search/__init__.py,sha256=Sqw60DcOj4Bnvt-EWFknT31sPcvROIRKCWLr5pbkFr4,39
|
|
57
57
|
cognee/api/v1/search/search.py,sha256=YQicNVi9q4FteAmt_EtY75I_EuNZ9ZjGE73wg-NcDwY,8824
|
|
58
58
|
cognee/api/v1/search/routers/__init__.py,sha256=6RebeLX_2NTRxIMPH_mGuLztPxnGnMJK1y_O93CtRm8,49
|
|
59
|
-
cognee/api/v1/search/routers/get_search_router.py,sha256
|
|
59
|
+
cognee/api/v1/search/routers/get_search_router.py,sha256=-5GLgHipflEblYAwl3uiPAZ2i3TgrLEjDuiO_cCqcB8,6252
|
|
60
60
|
cognee/api/v1/settings/routers/__init__.py,sha256=wj_UYAXNMPCkn6Mo1YB01dCBiV9DQwTIf6OWjnGRpf8,53
|
|
61
61
|
cognee/api/v1/settings/routers/get_settings_router.py,sha256=EKVj2kw5MDKZcxAIAyi7ltz7wD6Hfs5feGrkd9R_vCA,3195
|
|
62
62
|
cognee/api/v1/sync/__init__.py,sha256=hx2Af6GtX8soyHiYpWieWpAglLD05_7BK7PgdBqGbVE,313
|
|
@@ -64,7 +64,7 @@ cognee/api/v1/sync/sync.py,sha256=zzCVJD1AvcSXtNsgLJr1iPMRxY6vRxGdkt7sVdJ8W2c,33
|
|
|
64
64
|
cognee/api/v1/sync/routers/__init__.py,sha256=hZArat9DDyzBll8qej0_o16QhtQRciTB37b5rc3ckGM,76
|
|
65
65
|
cognee/api/v1/sync/routers/get_sync_router.py,sha256=7fD0QL0IIjyg9VBadNcLD7G7rypy_1glyWv8HVHBrao,9703
|
|
66
66
|
cognee/api/v1/ui/__init__.py,sha256=SKfmAWokGT3_ZGqDkEtQihrvXCog6WTP3UdZrD20DBc,38
|
|
67
|
-
cognee/api/v1/ui/ui.py,sha256=
|
|
67
|
+
cognee/api/v1/ui/ui.py,sha256=CTgEmVrpeG174jTalgc8F_4hO6LsBXtTFkczMaLlNvc,23137
|
|
68
68
|
cognee/api/v1/users/__init__.py,sha256=TMOZ_3puQxVqVIjWNA0yb16Tpp8yoNKAfwxIxoFpgus,37
|
|
69
69
|
cognee/api/v1/users/create_user.py,sha256=PRuc7aUhOpyb-g5nUGDKSegp3cxkZy5TDeX1sxX6jjM,324
|
|
70
70
|
cognee/api/v1/users/routers/__init__.py,sha256=_m3tyK2deFQCBjx6p-0t23e7qnnhAyx-2PBM7Wc6E7A,314
|
|
@@ -78,7 +78,7 @@ cognee/api/v1/visualize/__init__.py,sha256=TBk58R8cza6Qx7IP2r9RvAtE8Fmoo9vOh9VjC
|
|
|
78
78
|
cognee/api/v1/visualize/start_visualization_server.py,sha256=3esCKYYmBx9Sb2H5JWrliT47qNyt_rGrv1OvR0LJVAg,440
|
|
79
79
|
cognee/api/v1/visualize/visualize.py,sha256=xKhh1N-doIgFcnq9Tz1acwrS4fOqBFZlgif4prMBqP4,1077
|
|
80
80
|
cognee/cli/__init__.py,sha256=MaKUkdFaETdbuMFoV02V8BZNuYr7tZQJKt6y25CaUhk,243
|
|
81
|
-
cognee/cli/_cognee.py,sha256=
|
|
81
|
+
cognee/cli/_cognee.py,sha256=v7GeAGLXaVkkkjUpbmo4Ya3ff-cycE297F41Sjx0kNA,8878
|
|
82
82
|
cognee/cli/config.py,sha256=8XhUqpkmNNzCFbnIpRvNQIO2Hvw0OD44zWYM0eADozA,998
|
|
83
83
|
cognee/cli/debug.py,sha256=-u3REG2xloCFLwOWQ3wVM7RpZRn06QlnfDyCRoxrrek,444
|
|
84
84
|
cognee/cli/echo.py,sha256=3G4qYcYn1cShTeIKaZMPD_TgoS7LBqyUnMnTFaj5dUE,1128
|
|
@@ -181,12 +181,12 @@ cognee/infrastructure/databases/relational/get_async_session.py,sha256=qfiXSsTAA
|
|
|
181
181
|
cognee/infrastructure/databases/relational/get_migration_relational_engine.py,sha256=5RtH281iIQo3vqgwmKT0nuiJp9jNd7vw6xRUjc5xIDM,1070
|
|
182
182
|
cognee/infrastructure/databases/relational/get_relational_engine.py,sha256=De51ieg9eFhRLX08k9oNc-oszvt_9J5DHebqI1qI8_U,741
|
|
183
183
|
cognee/infrastructure/databases/relational/with_async_session.py,sha256=UgQeJOvgeM6yhyNDwWdGULtTjZosTnjDlr267Losnfs,803
|
|
184
|
-
cognee/infrastructure/databases/relational/sqlalchemy/SqlAlchemyAdapter.py,sha256=
|
|
184
|
+
cognee/infrastructure/databases/relational/sqlalchemy/SqlAlchemyAdapter.py,sha256=j4mnqNJAO-U-Qfveam6NgjIH5lt7WjSMLVlemBrdpYU,27540
|
|
185
185
|
cognee/infrastructure/databases/relational/sqlalchemy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
186
186
|
cognee/infrastructure/databases/utils/__init__.py,sha256=4C0ncZG-O6bOFJpKgscCHu6D5vodLWRIKpe-WT4Ijbs,75
|
|
187
187
|
cognee/infrastructure/databases/utils/get_or_create_dataset_database.py,sha256=wn7pRgeX-BU0L191_6pgT9P54uhVQlGMPqxQdvIlv4Y,2101
|
|
188
188
|
cognee/infrastructure/databases/vector/__init__.py,sha256=7MdGJ3Mxdh2RyDq39rcjD99liIa-yGXxDUzq--1qQZs,291
|
|
189
|
-
cognee/infrastructure/databases/vector/config.py,sha256=
|
|
189
|
+
cognee/infrastructure/databases/vector/config.py,sha256=4HOmqZOEfVNmAhjxRNePMU9haTVeR35R2XbhPTcMqFg,2952
|
|
190
190
|
cognee/infrastructure/databases/vector/create_vector_engine.py,sha256=ECtICkIW5QM_lX9465ZTxVXC5MCRo_h219q3GyFXxpc,4716
|
|
191
191
|
cognee/infrastructure/databases/vector/get_vector_engine.py,sha256=y4TMWJ6B6DxwKF9PMfjB6WqujPnVhf0oR2j35Q-KhvA,272
|
|
192
192
|
cognee/infrastructure/databases/vector/supported_databases.py,sha256=0UIYcQ15p7-rq5y_2A-E9ydcXyP6frdg8T5e5ECDDMI,25
|
|
@@ -365,8 +365,8 @@ cognee/infrastructure/loaders/external/pypdf_loader.py,sha256=nFa_h3LURBPoguRIID
|
|
|
365
365
|
cognee/infrastructure/loaders/external/unstructured_loader.py,sha256=XCRVHwpM5XmcjRmL4Pr9ELzBU_qYDPhX_Ahn5K8w0AU,4603
|
|
366
366
|
cognee/infrastructure/loaders/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
367
367
|
cognee/infrastructure/utils/calculate_backoff.py,sha256=O6h4MCe357BKaECmLZPLGYpffrMol65LwQCklBj4sh4,935
|
|
368
|
-
cognee/infrastructure/utils/run_async.py,sha256=
|
|
369
|
-
cognee/infrastructure/utils/run_sync.py,sha256=
|
|
368
|
+
cognee/infrastructure/utils/run_async.py,sha256=gZY8ZLG_86O9YVK8hciduIoDONHaEEnGOILh3EeD9LA,510
|
|
369
|
+
cognee/infrastructure/utils/run_sync.py,sha256=9pAXc-EmjtV03exnUMOVSC-IJq_KCslX05z62MHQjlQ,800
|
|
370
370
|
cognee/modules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
371
371
|
cognee/modules/chunking/Chunker.py,sha256=KezN4WBiV0KNJtx6daMg4g1-a-_oJxn_l_iQT94T1lQ,343
|
|
372
372
|
cognee/modules/chunking/LangchainChunker.py,sha256=Yo9Jza-t3x3V8I8PWbxUu48vlVVdvJKxwzL2gManwDc,2351
|
|
@@ -482,14 +482,15 @@ cognee/modules/metrics/operations/__init__.py,sha256=MZ3xbVdfEKqfLct8WnbyFVyZmkB
|
|
|
482
482
|
cognee/modules/metrics/operations/get_pipeline_run_metrics.py,sha256=upIWnzKeJT1_XbL_ABdGxW-Ai7mO3AqMK35BNmItIQQ,2434
|
|
483
483
|
cognee/modules/notebooks/methods/__init__.py,sha256=IhY4fUVPJbuvS83QESsWzjZRC6oC1I-kJi5gr3kPTLk,215
|
|
484
484
|
cognee/modules/notebooks/methods/create_notebook.py,sha256=S41H3Rha0pj9dEKFy1nBG9atTGHhUdOmDZgr0ckUA6M,633
|
|
485
|
+
cognee/modules/notebooks/methods/create_tutorial_notebook.py,sha256=8YPoDcMUZSNhEWSKxUcPOM61y0St2Z1Y-PC1HFRmlbk,4248
|
|
485
486
|
cognee/modules/notebooks/methods/delete_notebook.py,sha256=BKxoRlPzkwXvTYh5WcF-zo_iVmaXqEiptS42JwB0KQU,309
|
|
486
|
-
cognee/modules/notebooks/methods/get_notebook.py,sha256=
|
|
487
|
+
cognee/modules/notebooks/methods/get_notebook.py,sha256=IP4imsdt9X6GYd6i6WF6PlVhotGNH0i7XZpPqbtqMwo,554
|
|
487
488
|
cognee/modules/notebooks/methods/get_notebooks.py,sha256=ee40ALHvebVORuwZVkQ271qAj260rrYy6eVGxAmfo8c,483
|
|
488
|
-
cognee/modules/notebooks/methods/update_notebook.py,sha256=
|
|
489
|
+
cognee/modules/notebooks/methods/update_notebook.py,sha256=MnZbfh-WfEfH3ImNvyQNhDeNwpYeS7p8FPVwnmBvZVg,361
|
|
489
490
|
cognee/modules/notebooks/models/Notebook.py,sha256=Jth47QxJQ2-VGPyIcS0ul3bS8bgGrk9vCGoJVagxanw,1690
|
|
490
491
|
cognee/modules/notebooks/models/__init__.py,sha256=jldsDjwRvFMreGpe4wxxr5TlFXTZuU7rbsRkGQvTO5s,45
|
|
491
492
|
cognee/modules/notebooks/operations/__init__.py,sha256=VR_2w_d0lEiJ5Xw7_mboo2qWUv0umrR_Bp58MaMoE6w,55
|
|
492
|
-
cognee/modules/notebooks/operations/run_in_local_sandbox.py,sha256=
|
|
493
|
+
cognee/modules/notebooks/operations/run_in_local_sandbox.py,sha256=17hMEQC3LZTfPvbRUrPN9SzDeJPWSTq_BAhtwRZiqT8,1338
|
|
493
494
|
cognee/modules/observability/get_observe.py,sha256=chRw4jmpmrwEvDecF9sgApm23IOzVgCbwkKEAyz1_AI,264
|
|
494
495
|
cognee/modules/observability/observers.py,sha256=SKQSWWyGDG0QY2_bqsFgfpLUb7OUL4WFf8tDZYe5JMM,157
|
|
495
496
|
cognee/modules/ontology/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -549,15 +550,15 @@ cognee/modules/retrieval/code_retriever.py,sha256=cnOjgfCATzz0-XZGFrIIkuVZLc6HBh
|
|
|
549
550
|
cognee/modules/retrieval/coding_rules_retriever.py,sha256=3GU259jTbGLqmp_A8sUdE4fyf0td06SKuxBJVW-npIQ,1134
|
|
550
551
|
cognee/modules/retrieval/completion_retriever.py,sha256=Lw5sxN_UrtmWSOtcSS7Yj50Gw9p4nNBmW3dr2kV9JJ0,3754
|
|
551
552
|
cognee/modules/retrieval/cypher_search_retriever.py,sha256=_3rZJ23hSZpDa8kVyOSWN3fwjMI_aLF2m5p-FtBek8k,2440
|
|
552
|
-
cognee/modules/retrieval/graph_completion_context_extension_retriever.py,sha256
|
|
553
|
-
cognee/modules/retrieval/graph_completion_cot_retriever.py,sha256=
|
|
554
|
-
cognee/modules/retrieval/graph_completion_retriever.py,sha256=
|
|
553
|
+
cognee/modules/retrieval/graph_completion_context_extension_retriever.py,sha256=-6yN8gpRlDue8d28rk-Ly-gq0T8BW-i1-Jgbp1x-Zsg,4532
|
|
554
|
+
cognee/modules/retrieval/graph_completion_cot_retriever.py,sha256=JU-FkikaU68v8fT8VAmG6jojwhwroKYW2RUxdlJ1R-k,6140
|
|
555
|
+
cognee/modules/retrieval/graph_completion_retriever.py,sha256=VnrFD4xUQewIO83mfmIUcPLA_HBGdUlDVRyA2Pm4ARo,8822
|
|
555
556
|
cognee/modules/retrieval/graph_summary_completion_retriever.py,sha256=3AMisk3fObk2Vh1heY4veHkDjLsHgSSUc_ChZseJUYw,2456
|
|
556
|
-
cognee/modules/retrieval/insights_retriever.py,sha256=
|
|
557
|
+
cognee/modules/retrieval/insights_retriever.py,sha256=1pcYd34EfKk85MSPFQ8b-ZbSARmnauks8TxXfNOxvOw,4953
|
|
557
558
|
cognee/modules/retrieval/natural_language_retriever.py,sha256=zJz35zRmBP8-pRlkoxxSxn3-jtG2lUW0xcu58bq9Ebs,5761
|
|
558
559
|
cognee/modules/retrieval/summaries_retriever.py,sha256=joXYphypACm2JiCjbC8nBS61m1q2oYkzyIt9bdgALNw,3384
|
|
559
|
-
cognee/modules/retrieval/temporal_retriever.py,sha256=
|
|
560
|
-
cognee/modules/retrieval/user_qa_feedback.py,sha256
|
|
560
|
+
cognee/modules/retrieval/temporal_retriever.py,sha256=EUEYN94LpoWfbPjsToe_pC3rFsUUTIPA5K6wNjv8Nds,5685
|
|
561
|
+
cognee/modules/retrieval/user_qa_feedback.py,sha256=-VEOsE_t0FiTy00OpOMWAYv12YSLPieAcMsu82vm7h4,3366
|
|
561
562
|
cognee/modules/retrieval/context_providers/DummyContextProvider.py,sha256=9GsvINc7ekRyRWO5IefFGyytRYqsSlhpwAOw6Q691cA,419
|
|
562
563
|
cognee/modules/retrieval/context_providers/SummarizedTripletSearchContextProvider.py,sha256=ypO6yWLxvmRsj_5dyYdvXTbztJmB_ioLrgyG6bF5WGA,894
|
|
563
564
|
cognee/modules/retrieval/context_providers/TripletSearchContextProvider.py,sha256=8PzksHAtRw7tZarP3nZuxhi0cd1EYEDHOT4Q74mNEvc,3656
|
|
@@ -578,7 +579,7 @@ cognee/modules/search/exceptions/exceptions.py,sha256=Zc5Y0M-r-UnSSlpKzHKBplfjZ-
|
|
|
578
579
|
cognee/modules/search/methods/__init__.py,sha256=jGfRvNwM5yIzj025gaVhcx7nCupRSXbUUnFjYVjL_Js,27
|
|
579
580
|
cognee/modules/search/methods/get_search_type_tools.py,sha256=wXxOZx3uEnMhRhUO2HGswQ5iVbWvjUj17UT_qdJg6Oo,6837
|
|
580
581
|
cognee/modules/search/methods/no_access_control_search.py,sha256=R08aMgaB8AkD0_XVaX15qLyC9KJ3fSVFv9zeZwuyez4,1566
|
|
581
|
-
cognee/modules/search/methods/search.py,sha256=
|
|
582
|
+
cognee/modules/search/methods/search.py,sha256=Akqf4a913_nG56TMxTKU65kOwL0tWURDLHEXlwcgV1c,12459
|
|
582
583
|
cognee/modules/search/models/Query.py,sha256=9WcF5Z1oCFtA4O-7An37eNAPX3iyygO4B5NSwhx7iIg,558
|
|
583
584
|
cognee/modules/search/models/Result.py,sha256=U7QtoNzAtZnUDwGWhjVfcalHQd4daKtYYvJz2BeWQ4w,564
|
|
584
585
|
cognee/modules/search/operations/__init__.py,sha256=AwJl6v9BTpocoefEZLk-flo1EtydYb46NSUoNFHkhX0,156
|
|
@@ -592,7 +593,7 @@ cognee/modules/search/types/SearchResult.py,sha256=blEean6PRFKcDRQugsojZPfH-Wohx
|
|
|
592
593
|
cognee/modules/search/types/SearchType.py,sha256=-lT4bLKKunV4cL4FfF3tjNbdN7X4AsRMLpTkReNwXZM,594
|
|
593
594
|
cognee/modules/search/types/__init__.py,sha256=8k6OjVrL70W1Jh-ClTbG2ETYIhOtSk3tfqjzYgEdPzA,117
|
|
594
595
|
cognee/modules/search/utils/__init__.py,sha256=86mRtCN-B5-2NNChdQoU5x8_8hqTczGZjBoKVE9O7hA,124
|
|
595
|
-
cognee/modules/search/utils/prepare_search_result.py,sha256=
|
|
596
|
+
cognee/modules/search/utils/prepare_search_result.py,sha256=FTM-tVlprL8EswIcwOy8jO1bRmKG61GZqFfM8FNJUJg,1336
|
|
596
597
|
cognee/modules/search/utils/transform_context_to_graph.py,sha256=rUQeEH-Z-GqAzAZTCetRVpwgrOHlNe3mUBRLwRb0478,1238
|
|
597
598
|
cognee/modules/settings/__init__.py,sha256=_SZQgCQnnnIHLJuKOMO9uWzXNBQxwYHHMUSBp0qa2uQ,210
|
|
598
599
|
cognee/modules/settings/get_current_settings.py,sha256=R2lOusG5Q2PMa2-2vDndh3Lm7nXyZVkdzTV7vQHT81Y,1642
|
|
@@ -781,19 +782,25 @@ cognee/tests/test_neptune_analytics_graph.py,sha256=bZqPNk8ag_tilpRobK5RJVwTS473
|
|
|
781
782
|
cognee/tests/test_neptune_analytics_hybrid.py,sha256=Q9mCGGqroLnHrRo3kHdhkMZnlNtvCshRG1BgU81voBc,6222
|
|
782
783
|
cognee/tests/test_neptune_analytics_vector.py,sha256=h_Ofp4ZAdyGpCWzuQyoXmLO5lOycNLtliIFvJt7nXHg,8652
|
|
783
784
|
cognee/tests/test_parallel_databases.py,sha256=Hhm4zh-luaXKmy7mjEHq3VkMppt6QaJ3IB2IRUVkwSk,1997
|
|
784
|
-
cognee/tests/test_permissions.py,sha256=
|
|
785
|
+
cognee/tests/test_permissions.py,sha256=h2Gyug-1DI8YycYMBhfEY0XdZbG3qt7ubiK5x7EJCVc,11509
|
|
785
786
|
cognee/tests/test_pgvector.py,sha256=ZAaeWcnNBSYuyciYPBnzJSrGkuIjmKYWoNu3Jj7cPOM,9568
|
|
786
|
-
cognee/tests/test_relational_db_migration.py,sha256=
|
|
787
|
+
cognee/tests/test_relational_db_migration.py,sha256=QUgS40w3ZDO3fwvM0x0b1U0SxfFVJ3J6UEK5C48GVHA,8695
|
|
787
788
|
cognee/tests/test_remote_kuzu.py,sha256=2GG05MtGuhOo6ST82OxjdVDetBS0GWHvKKmmmEtQO2U,7245
|
|
788
789
|
cognee/tests/test_remote_kuzu_stress.py,sha256=5vgnu4Uz_NoKKqFZJeVceHwb2zNhvdTVBgpN3NjhfAE,5304
|
|
789
790
|
cognee/tests/test_s3.py,sha256=rY2UDK15cdyywlyVrR8N2DRtVXWYIW5REaaz99gaQeE,2694
|
|
790
791
|
cognee/tests/test_s3_file_storage.py,sha256=62tvIFyh_uTP0TFF9Ck4Y-sxWPW-cwJKYEJUJI1atPI,5654
|
|
791
|
-
cognee/tests/test_search_db.py,sha256=
|
|
792
|
+
cognee/tests/test_search_db.py,sha256=4GpLx8ZJoMjkp-XqQ-LCrkf3NhAM4j_rMmlOFgmDO-A,13420
|
|
792
793
|
cognee/tests/test_starter_pipelines.py,sha256=X1J8RDD0bFMKnRETyi5nyaF4TYdmUIu0EuD3WQwShNs,2475
|
|
793
794
|
cognee/tests/test_telemetry.py,sha256=FIneuVofSKWFYqxNC88sT_P5GPzgfjVyqDCf2TYBE2E,4130
|
|
794
795
|
cognee/tests/test_temporal_graph.py,sha256=G0PyzuvIYylwFT-3eZSzjtBik9O1g75sGLj3QK9RYTA,12624
|
|
795
|
-
cognee/tests/
|
|
796
|
-
cognee/tests/
|
|
796
|
+
cognee/tests/cli_tests/cli_integration_tests/__init__.py,sha256=xYkvpZkxv_HRWmX71pGM3NUw2KKkDQIM-V6Ehxu-f0I,39
|
|
797
|
+
cognee/tests/cli_tests/cli_integration_tests/test_cli_integration.py,sha256=3hdz1DoGeidJInqbCy1YQte6J0QeQG1_WKGs9utjAFg,11560
|
|
798
|
+
cognee/tests/cli_tests/cli_unit_tests/__init__.py,sha256=U069aFvdwfKPd6YsR_FJML5LRphHHF5wx9mwug1hRh4,32
|
|
799
|
+
cognee/tests/cli_tests/cli_unit_tests/test_cli_commands.py,sha256=5a3vPiSFmKumq6sTfdfMyeUpJGjbZ6_5zX4TUcV0ZJQ,17625
|
|
800
|
+
cognee/tests/cli_tests/cli_unit_tests/test_cli_edge_cases.py,sha256=PyFCnClvbXG1GaiS16qwcuyXXDJ4sRyBCKV5WHrOUxk,23501
|
|
801
|
+
cognee/tests/cli_tests/cli_unit_tests/test_cli_main.py,sha256=Gsj2zYlVL80iU9EjRj4Q4QzgsYuIngUvDbA9suV99oA,6098
|
|
802
|
+
cognee/tests/cli_tests/cli_unit_tests/test_cli_runner.py,sha256=WZ8oZIlc_JintDq_cnEg9tmLEMZMGFPQGhU7Y_7sfgs,1497
|
|
803
|
+
cognee/tests/cli_tests/cli_unit_tests/test_cli_utils.py,sha256=Flej8LNYRXNkWd2tq8elMm8MkqbhCUb8RtXaPzfNYm4,4323
|
|
797
804
|
cognee/tests/integration/documents/AudioDocument_test.py,sha256=0mJnlWRc7gWqOxAUfdSSIxntcUrzkPXhlsd-MFsiRoM,2790
|
|
798
805
|
cognee/tests/integration/documents/ImageDocument_test.py,sha256=vrb3uti0RF6a336LLI95i8fso3hOFw9AFe1NxPnOf6k,2802
|
|
799
806
|
cognee/tests/integration/documents/PdfDocument_test.py,sha256=IY0Cck8J2gEyuJHPK0HODPbZPIXQ799KhWrgkjn5feM,1798
|
|
@@ -821,12 +828,6 @@ cognee/tests/test_data/text_to_speech.mp3,sha256=h0xuFwn_ddt-q2AeBu_BdLmMJUc4QtE
|
|
|
821
828
|
cognee/tests/test_data/text_to_speech_copy.mp3,sha256=h0xuFwn_ddt-q2AeBu_BdLmMJUc4QtEKWdBQ9ydGYXI,28173
|
|
822
829
|
cognee/tests/unit/api/__init__.py,sha256=tKoksC3QC3r43L7MDdEdjE2A34r8iOD1YPv8mT-iZzk,29
|
|
823
830
|
cognee/tests/unit/api/test_conditional_authentication_endpoints.py,sha256=t5HX6s8D-5pFANy9IJEtY5ht_GhlJSZK_KkpqVj8ZdI,9349
|
|
824
|
-
cognee/tests/unit/cli/__init__.py,sha256=U069aFvdwfKPd6YsR_FJML5LRphHHF5wx9mwug1hRh4,32
|
|
825
|
-
cognee/tests/unit/cli/test_cli_commands.py,sha256=5a3vPiSFmKumq6sTfdfMyeUpJGjbZ6_5zX4TUcV0ZJQ,17625
|
|
826
|
-
cognee/tests/unit/cli/test_cli_edge_cases.py,sha256=PyFCnClvbXG1GaiS16qwcuyXXDJ4sRyBCKV5WHrOUxk,23501
|
|
827
|
-
cognee/tests/unit/cli/test_cli_main.py,sha256=Gsj2zYlVL80iU9EjRj4Q4QzgsYuIngUvDbA9suV99oA,6098
|
|
828
|
-
cognee/tests/unit/cli/test_cli_runner.py,sha256=WZ8oZIlc_JintDq_cnEg9tmLEMZMGFPQGhU7Y_7sfgs,1497
|
|
829
|
-
cognee/tests/unit/cli/test_cli_utils.py,sha256=Flej8LNYRXNkWd2tq8elMm8MkqbhCUb8RtXaPzfNYm4,4323
|
|
830
831
|
cognee/tests/unit/entity_extraction/regex_entity_extraction_test.py,sha256=3zNvSI56FBltg_lda06n93l2vl702i5O1ewoQXoo50E,10234
|
|
831
832
|
cognee/tests/unit/eval_framework/answer_generation_test.py,sha256=TVrAJneOiTSztq7J6poo4GGPsow3MWnBtpBwPkDHq08,1309
|
|
832
833
|
cognee/tests/unit/eval_framework/benchmark_adapters_test.py,sha256=yXmr5089j1KB5lrLs4v17JXPuUk2iwXJRJGOb_wdnqk,3382
|
|
@@ -854,10 +855,10 @@ cognee/tests/unit/modules/pipelines/run_task_from_queue_test.py,sha256=X2clLQYoP
|
|
|
854
855
|
cognee/tests/unit/modules/pipelines/run_tasks_test.py,sha256=IJ_2NBOizC-PtW4c1asYZB-SI85dQswB0Lt5e_n-5zI,1399
|
|
855
856
|
cognee/tests/unit/modules/pipelines/run_tasks_with_context_test.py,sha256=Bi5XgQWfrgCgTtRu1nrUAqraDYHUzILleOka5fpTsKE,1058
|
|
856
857
|
cognee/tests/unit/modules/retrieval/chunks_retriever_test.py,sha256=jHsvi1Y-bsOVdFrGIfGaTXV4UvwI4KzQF_hV0i3oy2I,6341
|
|
857
|
-
cognee/tests/unit/modules/retrieval/graph_completion_retriever_context_extension_test.py,sha256=
|
|
858
|
-
cognee/tests/unit/modules/retrieval/graph_completion_retriever_cot_test.py,sha256=
|
|
858
|
+
cognee/tests/unit/modules/retrieval/graph_completion_retriever_context_extension_test.py,sha256=nVKITq5N0cOLCjvJvS6e9vAdbwFcNWxe11O1F7rEzok,6906
|
|
859
|
+
cognee/tests/unit/modules/retrieval/graph_completion_retriever_cot_test.py,sha256=n5tMlsRzTsrMWpdqWS7nKOITwRnv3wNMMKFnXHTsdtU,6682
|
|
859
860
|
cognee/tests/unit/modules/retrieval/graph_completion_retriever_test.py,sha256=T-WXkG9opjtlxY8R6CXcHazc2xouPOdUR9bumxxzFsY,8986
|
|
860
|
-
cognee/tests/unit/modules/retrieval/insights_retriever_test.py,sha256=
|
|
861
|
+
cognee/tests/unit/modules/retrieval/insights_retriever_test.py,sha256=xkbxlNiHY6evVbBYMncllXDNs3nNC_jZeYP47oT8vG0,8592
|
|
861
862
|
cognee/tests/unit/modules/retrieval/rag_completion_retriever_test.py,sha256=RQi5EAjB5ffiIcsFmfg3Hao3AVPOkTEL72xnXIxbTKM,6551
|
|
862
863
|
cognee/tests/unit/modules/retrieval/summaries_retriever_test.py,sha256=IfhDyVuKUrjCEy22-Mva9w7li2mtPZT9FlNIFvpFMKw,4950
|
|
863
864
|
cognee/tests/unit/modules/retrieval/temporal_retriever_test.py,sha256=bvGvJgq9JF8nxnFvBlSo2qOBc0FKjCe006Io5HityAo,7672
|
|
@@ -888,9 +889,9 @@ distributed/tasks/queued_add_edges.py,sha256=kz1DHE05y-kNHORQJjYWHUi6Q1QWUp_v3Dl
|
|
|
888
889
|
distributed/tasks/queued_add_nodes.py,sha256=aqK4Ij--ADwUWknxYpiwbYrpa6CcvFfqHWbUZW4Kh3A,452
|
|
889
890
|
distributed/workers/data_point_saving_worker.py,sha256=jFmA0-P_0Ru2IUDrSug0wML-5goAKrGtlBm5BA5Ryw4,3229
|
|
890
891
|
distributed/workers/graph_saving_worker.py,sha256=oUYl99CdhlrPAIsUOHbHnS3d4XhGoV0_OIbCO8wYzRg,3648
|
|
891
|
-
cognee-0.3.
|
|
892
|
-
cognee-0.3.
|
|
893
|
-
cognee-0.3.
|
|
894
|
-
cognee-0.3.
|
|
895
|
-
cognee-0.3.
|
|
896
|
-
cognee-0.3.
|
|
892
|
+
cognee-0.3.3.dist-info/METADATA,sha256=MofBzxb-pUo59hyKjasnooG9SDbuVPsvy5UK6sjXluA,14753
|
|
893
|
+
cognee-0.3.3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
894
|
+
cognee-0.3.3.dist-info/entry_points.txt,sha256=GCCTsNg8gzOJkolq7dR7OK1VlIAO202dGDnMI8nm8oQ,55
|
|
895
|
+
cognee-0.3.3.dist-info/licenses/LICENSE,sha256=pHHjSQj1DD8SDppW88MMs04TPk7eAanL1c5xj8NY7NQ,11344
|
|
896
|
+
cognee-0.3.3.dist-info/licenses/NOTICE.md,sha256=6L3saP3kSpcingOxDh-SGjMS8GY79Rlh2dBNLaO0o5c,339
|
|
897
|
+
cognee-0.3.3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|