graphiti-core 0.15.0__tar.gz → 0.16.0__tar.gz
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.
Potentially problematic release.
This version of graphiti-core might be problematic. Click here for more details.
- graphiti_core-0.16.0/.github/ISSUE_TEMPLATE/bug_report.md +54 -0
- graphiti_core-0.16.0/.github/pull_request_template.md +32 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/.github/workflows/cla.yml +1 -1
- graphiti_core-0.16.0/.github/workflows/claude-code-review.yml +78 -0
- graphiti_core-0.16.0/.github/workflows/claude.yml +64 -0
- graphiti_core-0.16.0/.github/workflows/mcp-server-docker.yml +73 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/CLAUDE.md +4 -3
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/CONTRIBUTING.md +62 -1
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/PKG-INFO +45 -4
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/README.md +37 -1
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/examples/podcast/podcast_runner.py +38 -14
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/examples/quickstart/README.md +23 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/examples/quickstart/quickstart_falkordb.py +5 -2
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/cross_encoder/__init__.py +1 -2
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/cross_encoder/bge_reranker_client.py +12 -2
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/cross_encoder/gemini_reranker_client.py +19 -4
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/cross_encoder/openai_reranker_client.py +5 -3
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/driver/__init__.py +1 -2
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/driver/falkordb_driver.py +15 -4
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/embedder/gemini.py +31 -7
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/embedder/voyage.py +12 -1
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/graphiti.py +107 -53
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/llm_client/anthropic_client.py +17 -4
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/llm_client/gemini_client.py +24 -8
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/llm_client/groq_client.py +14 -3
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/nodes.py +4 -4
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/prompts/dedupe_edges.py +5 -4
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/prompts/dedupe_nodes.py +3 -3
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/search/search_utils.py +4 -2
- graphiti_core-0.16.0/graphiti_core/utils/bulk_utils.py +438 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/utils/maintenance/edge_operations.py +34 -120
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/utils/maintenance/graph_data_operations.py +2 -1
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/utils/maintenance/node_operations.py +11 -58
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/mcp_server/README.md +19 -3
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/mcp_server/docker-compose.yml +4 -3
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/mcp_server/graphiti_mcp_server.py +41 -32
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/mcp_server/pyproject.toml +1 -1
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/pyproject.toml +5 -2
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/signatures/version1/cla.json +40 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/driver/test_falkordb_driver.py +41 -65
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/test_graphiti_falkordb_int.py +4 -10
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/test_graphiti_int.py +6 -1
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/test_node_falkordb_int.py +6 -15
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/uv.lock +14 -4
- graphiti_core-0.15.0/graphiti_core/utils/bulk_utils.py +0 -482
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/.env.example +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/.github/dependabot.yml +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/.github/secret_scanning.yml +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/.github/workflows/codeql.yml +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/.github/workflows/lint.yml +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/.github/workflows/release-graphiti-core.yml +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/.github/workflows/typecheck.yml +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/.github/workflows/unit_tests.yml +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/.gitignore +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/CODE_OF_CONDUCT.md +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/Dockerfile +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/LICENSE +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/Makefile +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/SECURITY.md +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/Zep-CLA.md +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/conftest.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/depot.json +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/docker-compose.test.yml +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/docker-compose.yml +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/ellipsis.yaml +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/examples/data/manybirds_products.json +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/examples/ecommerce/runner.ipynb +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/examples/ecommerce/runner.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/examples/langgraph-agent/agent.ipynb +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/examples/langgraph-agent/tinybirds-jess.png +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/examples/podcast/podcast_transcript.txt +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/examples/podcast/transcript_parser.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/examples/quickstart/quickstart_neo4j.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/examples/quickstart/requirements.txt +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/examples/wizard_of_oz/parser.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/examples/wizard_of_oz/runner.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/examples/wizard_of_oz/woo.txt +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/__init__.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/cross_encoder/client.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/driver/driver.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/driver/neo4j_driver.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/edges.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/embedder/__init__.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/embedder/azure_openai.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/embedder/client.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/embedder/openai.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/errors.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/graph_queries.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/graphiti_types.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/helpers.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/llm_client/__init__.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/llm_client/azure_openai_client.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/llm_client/client.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/llm_client/config.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/llm_client/errors.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/llm_client/openai_base_client.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/llm_client/openai_client.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/llm_client/openai_generic_client.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/llm_client/utils.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/models/__init__.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/models/edges/__init__.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/models/edges/edge_db_queries.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/models/nodes/__init__.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/models/nodes/node_db_queries.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/prompts/__init__.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/prompts/eval.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/prompts/extract_edge_dates.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/prompts/extract_edges.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/prompts/extract_nodes.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/prompts/invalidate_edges.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/prompts/lib.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/prompts/models.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/prompts/prompt_helpers.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/prompts/summarize_nodes.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/py.typed +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/search/__init__.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/search/search.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/search/search_config.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/search/search_config_recipes.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/search/search_filters.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/search/search_helpers.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/telemetry/__init__.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/telemetry/telemetry.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/utils/__init__.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/utils/datetime_utils.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/utils/maintenance/__init__.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/utils/maintenance/community_operations.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/utils/maintenance/temporal_operations.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/utils/maintenance/utils.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/utils/ontology_utils/entity_types_utils.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/images/arxiv-screenshot.png +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/images/graphiti-graph-intro.gif +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/images/graphiti-intro-slides-stock-2.gif +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/images/simple_graph.svg +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/mcp_server/.env.example +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/mcp_server/.python-version +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/mcp_server/Dockerfile +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/mcp_server/cursor_rules.md +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/mcp_server/mcp_config_sse_example.json +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/mcp_server/mcp_config_stdio_example.json +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/mcp_server/uv.lock +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/poetry.lock +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/py.typed +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/pytest.ini +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/server/.env.example +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/server/Makefile +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/server/README.md +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/server/graph_service/__init__.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/server/graph_service/config.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/server/graph_service/dto/__init__.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/server/graph_service/dto/common.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/server/graph_service/dto/ingest.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/server/graph_service/dto/retrieve.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/server/graph_service/main.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/server/graph_service/routers/__init__.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/server/graph_service/routers/ingest.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/server/graph_service/routers/retrieve.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/server/graph_service/zep_graphiti.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/server/pyproject.toml +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/server/uv.lock +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/cross_encoder/test_bge_reranker_client.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/cross_encoder/test_gemini_reranker_client.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/driver/__init__.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/embedder/embedder_fixtures.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/embedder/test_gemini.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/embedder/test_openai.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/embedder/test_voyage.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/evals/data/longmemeval_data/README.md +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/evals/data/longmemeval_data/longmemeval_oracle.json +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/evals/eval_cli.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/evals/eval_e2e_graph_building.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/evals/pytest.ini +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/evals/utils.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/helpers_test.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/llm_client/test_anthropic_client.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/llm_client/test_anthropic_client_int.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/llm_client/test_client.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/llm_client/test_errors.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/llm_client/test_gemini_client.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/test_entity_exclusion_int.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/test_node_int.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/utils/maintenance/test_edge_operations.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/utils/maintenance/test_temporal_operations_int.py +0 -0
- {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/utils/search/search_utils_test.py +0 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Bug Report
|
|
3
|
+
about: Create a report to help us improve Graphiti
|
|
4
|
+
title: '[BUG] '
|
|
5
|
+
labels: bug
|
|
6
|
+
assignees: ''
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Bug Description
|
|
10
|
+
A clear and concise description of what the bug is.
|
|
11
|
+
|
|
12
|
+
## Steps to Reproduce
|
|
13
|
+
Provide a minimal code example that reproduces the issue:
|
|
14
|
+
|
|
15
|
+
```python
|
|
16
|
+
# Your code here
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Expected Behavior
|
|
20
|
+
A clear and concise description of what you expected to happen.
|
|
21
|
+
|
|
22
|
+
## Actual Behavior
|
|
23
|
+
A clear and concise description of what actually happened.
|
|
24
|
+
|
|
25
|
+
## Environment
|
|
26
|
+
- **Graphiti Version**: [e.g. 0.15.1]
|
|
27
|
+
- **Python Version**: [e.g. 3.11.5]
|
|
28
|
+
- **Operating System**: [e.g. macOS 14.0, Ubuntu 22.04]
|
|
29
|
+
- **Database Backend**: [e.g. Neo4j 5.26, FalkorDB 1.1.2]
|
|
30
|
+
- **LLM Provider & Model**: [e.g. OpenAI gpt-4.1, Anthropic claude-4-sonnet, Google gemini-2.5-flash]
|
|
31
|
+
|
|
32
|
+
## Installation Method
|
|
33
|
+
- [ ] pip install
|
|
34
|
+
- [ ] uv add
|
|
35
|
+
- [ ] Development installation (git clone)
|
|
36
|
+
|
|
37
|
+
## Error Messages/Traceback
|
|
38
|
+
```
|
|
39
|
+
Paste the full error message and traceback here
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Configuration
|
|
43
|
+
```python
|
|
44
|
+
# Relevant configuration or initialization code
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Additional Context
|
|
48
|
+
- Does this happen consistently or intermittently?
|
|
49
|
+
- Which component are you using? (core library, REST server, MCP server)
|
|
50
|
+
- Any recent changes to your environment?
|
|
51
|
+
- Related issues or similar problems you've encountered?
|
|
52
|
+
|
|
53
|
+
## Possible Solution
|
|
54
|
+
If you have ideas about what might be causing the issue or how to fix it, please share them here.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
## Summary
|
|
2
|
+
Brief description of the changes in this PR.
|
|
3
|
+
|
|
4
|
+
## Type of Change
|
|
5
|
+
- [ ] Bug fix
|
|
6
|
+
- [ ] New feature
|
|
7
|
+
- [ ] Performance improvement
|
|
8
|
+
- [ ] Documentation/Tests
|
|
9
|
+
|
|
10
|
+
## Objective
|
|
11
|
+
**For new features and performance improvements:** Clearly describe the objective and rationale for this change.
|
|
12
|
+
|
|
13
|
+
## Testing
|
|
14
|
+
- [ ] Unit tests added/updated
|
|
15
|
+
- [ ] Integration tests added/updated
|
|
16
|
+
- [ ] All existing tests pass
|
|
17
|
+
|
|
18
|
+
## Breaking Changes
|
|
19
|
+
- [ ] This PR contains breaking changes
|
|
20
|
+
|
|
21
|
+
If this is a breaking change, describe:
|
|
22
|
+
- What functionality is affected
|
|
23
|
+
- Migration path for existing users
|
|
24
|
+
|
|
25
|
+
## Checklist
|
|
26
|
+
- [ ] Code follows project style guidelines (`make lint` passes)
|
|
27
|
+
- [ ] Self-review completed
|
|
28
|
+
- [ ] Documentation updated where necessary
|
|
29
|
+
- [ ] No secrets or sensitive information committed
|
|
30
|
+
|
|
31
|
+
## Related Issues
|
|
32
|
+
Closes #[issue number]
|
|
@@ -28,7 +28,7 @@ jobs:
|
|
|
28
28
|
path-to-document: "https://github.com/getzep/graphiti/blob/main/Zep-CLA.md" # e.g. a CLA or a DCO document
|
|
29
29
|
# branch should not be protected unless a personal PAT is used
|
|
30
30
|
branch: "main"
|
|
31
|
-
allowlist: paul-paliychuk,prasmussen15,danielchalef,dependabot[bot],ellipsis-dev
|
|
31
|
+
allowlist: paul-paliychuk,prasmussen15,danielchalef,dependabot[bot],ellipsis-dev,Claude[bot]
|
|
32
32
|
|
|
33
33
|
# the followings are the optional inputs - If the optional inputs are not given, then default values will be taken
|
|
34
34
|
#remote-organization-name: enter the remote organization name where the signatures should be stored (Default is storing the signatures in the same repository)
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
name: Claude Code Review
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
types: [opened, synchronize]
|
|
6
|
+
# Optional: Only run on specific file changes
|
|
7
|
+
# paths:
|
|
8
|
+
# - "src/**/*.ts"
|
|
9
|
+
# - "src/**/*.tsx"
|
|
10
|
+
# - "src/**/*.js"
|
|
11
|
+
# - "src/**/*.jsx"
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
claude-review:
|
|
15
|
+
# Optional: Filter by PR author
|
|
16
|
+
# if: |
|
|
17
|
+
# github.event.pull_request.user.login == 'external-contributor' ||
|
|
18
|
+
# github.event.pull_request.user.login == 'new-developer' ||
|
|
19
|
+
# github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR'
|
|
20
|
+
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
permissions:
|
|
23
|
+
contents: read
|
|
24
|
+
pull-requests: write
|
|
25
|
+
issues: read
|
|
26
|
+
id-token: write
|
|
27
|
+
|
|
28
|
+
steps:
|
|
29
|
+
- name: Checkout repository
|
|
30
|
+
uses: actions/checkout@v4
|
|
31
|
+
with:
|
|
32
|
+
fetch-depth: 1
|
|
33
|
+
|
|
34
|
+
- name: Run Claude Code Review
|
|
35
|
+
id: claude-review
|
|
36
|
+
uses: anthropics/claude-code-action@beta
|
|
37
|
+
with:
|
|
38
|
+
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
39
|
+
|
|
40
|
+
# Optional: Specify model (defaults to Claude Sonnet 4, uncomment for Claude Opus 4)
|
|
41
|
+
# model: "claude-opus-4-20250514"
|
|
42
|
+
|
|
43
|
+
# Direct prompt for automated review (no @claude mention needed)
|
|
44
|
+
direct_prompt: |
|
|
45
|
+
Please review this pull request and provide feedback on:
|
|
46
|
+
- Code quality and best practices
|
|
47
|
+
- Potential bugs or issues
|
|
48
|
+
- Performance considerations
|
|
49
|
+
- Security concerns
|
|
50
|
+
- Test coverage
|
|
51
|
+
|
|
52
|
+
Be constructive and helpful in your feedback.
|
|
53
|
+
|
|
54
|
+
# Optional: Use sticky comments to make Claude reuse the same comment on subsequent pushes to the same PR
|
|
55
|
+
# use_sticky_comment: true
|
|
56
|
+
|
|
57
|
+
# Optional: Customize review based on file types
|
|
58
|
+
# direct_prompt: |
|
|
59
|
+
# Review this PR focusing on:
|
|
60
|
+
# - For TypeScript files: Type safety and proper interface usage
|
|
61
|
+
# - For API endpoints: Security, input validation, and error handling
|
|
62
|
+
# - For React components: Performance, accessibility, and best practices
|
|
63
|
+
# - For tests: Coverage, edge cases, and test quality
|
|
64
|
+
|
|
65
|
+
# Optional: Different prompts for different authors
|
|
66
|
+
# direct_prompt: |
|
|
67
|
+
# ${{ github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR' &&
|
|
68
|
+
# 'Welcome! Please review this PR from a first-time contributor. Be encouraging and provide detailed explanations for any suggestions.' ||
|
|
69
|
+
# 'Please provide a thorough code review focusing on our coding standards and best practices.' }}
|
|
70
|
+
|
|
71
|
+
# Optional: Add specific tools for running tests or linting
|
|
72
|
+
# allowed_tools: "Bash(npm run test),Bash(npm run lint),Bash(npm run typecheck)"
|
|
73
|
+
|
|
74
|
+
# Optional: Skip review for certain conditions
|
|
75
|
+
# if: |
|
|
76
|
+
# !contains(github.event.pull_request.title, '[skip-review]') &&
|
|
77
|
+
# !contains(github.event.pull_request.title, '[WIP]')
|
|
78
|
+
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
name: Claude Code
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
issue_comment:
|
|
5
|
+
types: [created]
|
|
6
|
+
pull_request_review_comment:
|
|
7
|
+
types: [created]
|
|
8
|
+
issues:
|
|
9
|
+
types: [opened, assigned]
|
|
10
|
+
pull_request_review:
|
|
11
|
+
types: [submitted]
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
claude:
|
|
15
|
+
if: |
|
|
16
|
+
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
|
|
17
|
+
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
|
|
18
|
+
(github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
|
|
19
|
+
(github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
|
|
20
|
+
runs-on: ubuntu-latest
|
|
21
|
+
permissions:
|
|
22
|
+
contents: read
|
|
23
|
+
pull-requests: write
|
|
24
|
+
issues: write
|
|
25
|
+
id-token: write
|
|
26
|
+
actions: read # Required for Claude to read CI results on PRs
|
|
27
|
+
steps:
|
|
28
|
+
- name: Checkout repository
|
|
29
|
+
uses: actions/checkout@v4
|
|
30
|
+
with:
|
|
31
|
+
fetch-depth: 1
|
|
32
|
+
|
|
33
|
+
- name: Run Claude Code
|
|
34
|
+
id: claude
|
|
35
|
+
uses: anthropics/claude-code-action@beta
|
|
36
|
+
with:
|
|
37
|
+
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
38
|
+
|
|
39
|
+
# This is an optional setting that allows Claude to read CI results on PRs
|
|
40
|
+
additional_permissions: |
|
|
41
|
+
actions: read
|
|
42
|
+
|
|
43
|
+
# Optional: Specify model (defaults to Claude Sonnet 4, uncomment for Claude Opus 4)
|
|
44
|
+
# model: "claude-opus-4-20250514"
|
|
45
|
+
|
|
46
|
+
# Optional: Customize the trigger phrase (default: @claude)
|
|
47
|
+
# trigger_phrase: "/claude"
|
|
48
|
+
|
|
49
|
+
# Optional: Trigger when specific user is assigned to an issue
|
|
50
|
+
# assignee_trigger: "claude-bot"
|
|
51
|
+
|
|
52
|
+
# Optional: Allow Claude to run specific commands
|
|
53
|
+
# allowed_tools: "Bash(npm install),Bash(npm run build),Bash(npm run test:*),Bash(npm run lint:*)"
|
|
54
|
+
|
|
55
|
+
# Optional: Add custom instructions for Claude to customize its behavior for your project
|
|
56
|
+
# custom_instructions: |
|
|
57
|
+
# Follow our coding standards
|
|
58
|
+
# Ensure all new code has tests
|
|
59
|
+
# Use TypeScript for new files
|
|
60
|
+
|
|
61
|
+
# Optional: Custom environment variables for Claude
|
|
62
|
+
# claude_env: |
|
|
63
|
+
# NODE_ENV: test
|
|
64
|
+
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
name: Build and Push MCP Server Docker Image
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
paths:
|
|
6
|
+
- "mcp_server/pyproject.toml"
|
|
7
|
+
branches:
|
|
8
|
+
- main
|
|
9
|
+
pull_request:
|
|
10
|
+
paths:
|
|
11
|
+
- "mcp_server/pyproject.toml"
|
|
12
|
+
branches:
|
|
13
|
+
- main
|
|
14
|
+
workflow_dispatch:
|
|
15
|
+
inputs:
|
|
16
|
+
push_image:
|
|
17
|
+
description: "Push image to registry (unchecked for testing)"
|
|
18
|
+
required: false
|
|
19
|
+
default: false
|
|
20
|
+
type: boolean
|
|
21
|
+
|
|
22
|
+
env:
|
|
23
|
+
REGISTRY: docker.io
|
|
24
|
+
IMAGE_NAME: zepai/knowledge-graph-mcp
|
|
25
|
+
|
|
26
|
+
jobs:
|
|
27
|
+
build-and-push:
|
|
28
|
+
runs-on: depot-ubuntu-24.04-small
|
|
29
|
+
environment: development
|
|
30
|
+
permissions:
|
|
31
|
+
contents: read
|
|
32
|
+
id-token: write
|
|
33
|
+
steps:
|
|
34
|
+
- name: Checkout repository
|
|
35
|
+
uses: actions/checkout@v4
|
|
36
|
+
|
|
37
|
+
- name: Extract version from pyproject.toml
|
|
38
|
+
id: version
|
|
39
|
+
run: |
|
|
40
|
+
VERSION=$(python -c "import tomllib; print(tomllib.load(open('mcp_server/pyproject.toml', 'rb'))['project']['version'])")
|
|
41
|
+
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
|
42
|
+
echo "tag=v$VERSION" >> $GITHUB_OUTPUT
|
|
43
|
+
- name: Log in to Docker Hub
|
|
44
|
+
if: github.event_name != 'pull_request' && (github.event_name != 'workflow_dispatch' || inputs.push_image)
|
|
45
|
+
uses: docker/login-action@v3
|
|
46
|
+
with:
|
|
47
|
+
registry: ${{ env.REGISTRY }}
|
|
48
|
+
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
49
|
+
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
50
|
+
|
|
51
|
+
- name: Set up Depot CLI
|
|
52
|
+
uses: depot/setup-action@v1
|
|
53
|
+
|
|
54
|
+
- name: Extract metadata
|
|
55
|
+
id: meta
|
|
56
|
+
uses: docker/metadata-action@v5
|
|
57
|
+
with:
|
|
58
|
+
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
|
59
|
+
tags: |
|
|
60
|
+
type=ref,event=branch
|
|
61
|
+
type=ref,event=pr
|
|
62
|
+
type=raw,value=${{ steps.version.outputs.tag }}
|
|
63
|
+
type=raw,value=latest,enable={{is_default_branch}}
|
|
64
|
+
|
|
65
|
+
- name: Depot build and push image
|
|
66
|
+
uses: depot/build-push-action@v1
|
|
67
|
+
with:
|
|
68
|
+
project: v9jv1mlpwc
|
|
69
|
+
context: ./mcp_server
|
|
70
|
+
platforms: linux/amd64,linux/arm64
|
|
71
|
+
push: ${{ github.event_name != 'pull_request' && (github.event_name != 'workflow_dispatch' || inputs.push_image) }}
|
|
72
|
+
tags: ${{ steps.meta.outputs.tags }}
|
|
73
|
+
labels: ${{ steps.meta.outputs.labels }}
|
|
@@ -24,7 +24,7 @@ uv sync --extra dev
|
|
|
24
24
|
# Format code (ruff import sorting + formatting)
|
|
25
25
|
make format
|
|
26
26
|
|
|
27
|
-
# Lint code (ruff +
|
|
27
|
+
# Lint code (ruff + pyright type checking)
|
|
28
28
|
make lint
|
|
29
29
|
|
|
30
30
|
# Run tests
|
|
@@ -111,7 +111,8 @@ docker-compose up
|
|
|
111
111
|
- Use Ruff for formatting and linting (configured in pyproject.toml)
|
|
112
112
|
- Line length: 100 characters
|
|
113
113
|
- Quote style: single quotes
|
|
114
|
-
- Type checking with
|
|
114
|
+
- Type checking with Pyright is enforced
|
|
115
|
+
- Main project uses `typeCheckingMode = "basic"`, server uses `typeCheckingMode = "standard"`
|
|
115
116
|
|
|
116
117
|
### Testing Requirements
|
|
117
118
|
|
|
@@ -130,4 +131,4 @@ When working with the MCP server, follow the patterns established in `mcp_server
|
|
|
130
131
|
- Always search for existing knowledge before adding new information
|
|
131
132
|
- Use specific entity type filters (`Preference`, `Procedure`, `Requirement`)
|
|
132
133
|
- Store new information immediately using `add_memory`
|
|
133
|
-
- Follow discovered procedures and respect established preferences
|
|
134
|
+
- Follow discovered procedures and respect established preferences
|
|
@@ -116,7 +116,7 @@ Once you've found an issue tagged with "good first issue" or "help wanted," or p
|
|
|
116
116
|
We use several tools to maintain code quality:
|
|
117
117
|
|
|
118
118
|
- Ruff for linting and formatting
|
|
119
|
-
-
|
|
119
|
+
- Pyright for static type checking
|
|
120
120
|
- Pytest for testing
|
|
121
121
|
|
|
122
122
|
Before submitting a pull request, please run:
|
|
@@ -127,6 +127,67 @@ make check
|
|
|
127
127
|
|
|
128
128
|
This command will format your code, run linting checks, and execute tests.
|
|
129
129
|
|
|
130
|
+
## Third-Party Integrations
|
|
131
|
+
|
|
132
|
+
When contributing integrations for third-party services (LLM providers, embedding services, databases, etc.), please follow these patterns:
|
|
133
|
+
|
|
134
|
+
### Optional Dependencies
|
|
135
|
+
|
|
136
|
+
All third-party integrations must be optional dependencies to keep the core library lightweight. Follow this pattern:
|
|
137
|
+
|
|
138
|
+
1. **Add to `pyproject.toml`**: Define your dependency as an optional extra AND include it in the dev extra:
|
|
139
|
+
```toml
|
|
140
|
+
[project.optional-dependencies]
|
|
141
|
+
your-service = ["your-package>=1.0.0"]
|
|
142
|
+
dev = [
|
|
143
|
+
# ... existing dev dependencies
|
|
144
|
+
"your-package>=1.0.0", # Include all optional extras here
|
|
145
|
+
# ... other dependencies
|
|
146
|
+
]
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
2. **Use TYPE_CHECKING pattern**: In your integration module, import dependencies conditionally:
|
|
150
|
+
```python
|
|
151
|
+
from typing import TYPE_CHECKING
|
|
152
|
+
|
|
153
|
+
if TYPE_CHECKING:
|
|
154
|
+
import your_package
|
|
155
|
+
from your_package import SomeType
|
|
156
|
+
else:
|
|
157
|
+
try:
|
|
158
|
+
import your_package
|
|
159
|
+
from your_package import SomeType
|
|
160
|
+
except ImportError:
|
|
161
|
+
raise ImportError(
|
|
162
|
+
'your-package is required for YourServiceClient. '
|
|
163
|
+
'Install it with: pip install graphiti-core[your-service]'
|
|
164
|
+
) from None
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
3. **Benefits of this pattern**:
|
|
168
|
+
- Fast startup times (no import overhead during type checking)
|
|
169
|
+
- Clear error messages with installation instructions
|
|
170
|
+
- Proper type hints for development
|
|
171
|
+
- Consistent user experience
|
|
172
|
+
|
|
173
|
+
4. **Do NOT**:
|
|
174
|
+
- Add optional imports to `__init__.py` files
|
|
175
|
+
- Use direct imports without error handling
|
|
176
|
+
- Include optional dependencies in the main `dependencies` list
|
|
177
|
+
|
|
178
|
+
### Integration Structure
|
|
179
|
+
|
|
180
|
+
- Place LLM clients in `graphiti_core/llm_client/`
|
|
181
|
+
- Place embedding clients in `graphiti_core/embedder/`
|
|
182
|
+
- Place database drivers in `graphiti_core/driver/`
|
|
183
|
+
- Follow existing naming conventions (e.g., `your_service_client.py`)
|
|
184
|
+
|
|
185
|
+
### Testing
|
|
186
|
+
|
|
187
|
+
- Add comprehensive tests in the appropriate `tests/` subdirectory
|
|
188
|
+
- Mark integration tests with `_int` suffix if they require external services
|
|
189
|
+
- Include both unit tests and integration tests where applicable
|
|
190
|
+
|
|
130
191
|
# Questions?
|
|
131
192
|
|
|
132
193
|
Stuck on a contribution or have a half-formed idea? Come say hello in our [Discord server](https://discord.com/invite/W8Kw6bsgXQ). Whether you're ready to contribute or just want to learn more, we're happy to have you! It's faster than GitHub issues and you'll find both maintainers and fellow contributors ready to help.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: graphiti-core
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.16.0
|
|
4
4
|
Summary: A temporal graph building library
|
|
5
5
|
Project-URL: Homepage, https://help.getzep.com/graphiti/graphiti/overview
|
|
6
6
|
Project-URL: Repository, https://github.com/getzep/graphiti
|
|
@@ -21,6 +21,7 @@ Requires-Dist: anthropic>=0.49.0; extra == 'anthropic'
|
|
|
21
21
|
Provides-Extra: dev
|
|
22
22
|
Requires-Dist: anthropic>=0.49.0; extra == 'dev'
|
|
23
23
|
Requires-Dist: diskcache-stubs>=5.6.3.6.20240818; extra == 'dev'
|
|
24
|
+
Requires-Dist: falkordb<2.0.0,>=1.1.2; extra == 'dev'
|
|
24
25
|
Requires-Dist: google-genai>=1.8.0; extra == 'dev'
|
|
25
26
|
Requires-Dist: groq>=0.2.0; extra == 'dev'
|
|
26
27
|
Requires-Dist: ipykernel>=6.29.5; extra == 'dev'
|
|
@@ -37,12 +38,16 @@ Requires-Dist: ruff>=0.7.1; extra == 'dev'
|
|
|
37
38
|
Requires-Dist: sentence-transformers>=3.2.1; extra == 'dev'
|
|
38
39
|
Requires-Dist: transformers>=4.45.2; extra == 'dev'
|
|
39
40
|
Requires-Dist: voyageai>=0.2.3; extra == 'dev'
|
|
40
|
-
Provides-Extra:
|
|
41
|
-
Requires-Dist: falkordb<2.0.0,>=1.1.2; extra == '
|
|
41
|
+
Provides-Extra: falkordb
|
|
42
|
+
Requires-Dist: falkordb<2.0.0,>=1.1.2; extra == 'falkordb'
|
|
42
43
|
Provides-Extra: google-genai
|
|
43
44
|
Requires-Dist: google-genai>=1.8.0; extra == 'google-genai'
|
|
44
45
|
Provides-Extra: groq
|
|
45
46
|
Requires-Dist: groq>=0.2.0; extra == 'groq'
|
|
47
|
+
Provides-Extra: sentence-transformers
|
|
48
|
+
Requires-Dist: sentence-transformers>=3.2.1; extra == 'sentence-transformers'
|
|
49
|
+
Provides-Extra: voyageai
|
|
50
|
+
Requires-Dist: voyageai>=0.2.3; extra == 'voyageai'
|
|
46
51
|
Description-Content-Type: text/markdown
|
|
47
52
|
|
|
48
53
|
<p align="center">
|
|
@@ -184,7 +189,18 @@ or
|
|
|
184
189
|
uv add graphiti-core
|
|
185
190
|
```
|
|
186
191
|
|
|
187
|
-
|
|
192
|
+
### Installing with FalkorDB Support
|
|
193
|
+
|
|
194
|
+
If you plan to use FalkorDB as your graph database backend, install with the FalkorDB extra:
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
pip install graphiti-core[falkordb]
|
|
198
|
+
|
|
199
|
+
# or with uv
|
|
200
|
+
uv add graphiti-core[falkordb]
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
### You can also install optional LLM providers as extras:
|
|
188
204
|
|
|
189
205
|
```bash
|
|
190
206
|
# Install with Anthropic support
|
|
@@ -198,6 +214,9 @@ pip install graphiti-core[google-genai]
|
|
|
198
214
|
|
|
199
215
|
# Install with multiple providers
|
|
200
216
|
pip install graphiti-core[anthropic,groq,google-genai]
|
|
217
|
+
|
|
218
|
+
# Install with FalkorDB and LLM providers
|
|
219
|
+
pip install graphiti-core[falkordb,anthropic,google-genai]
|
|
201
220
|
```
|
|
202
221
|
|
|
203
222
|
## Quick Start
|
|
@@ -246,6 +265,28 @@ In addition to the Neo4j and OpenAi-compatible credentials, Graphiti also has a
|
|
|
246
265
|
If you are using one of our supported models, such as Anthropic or Voyage models, the necessary environment variables
|
|
247
266
|
must be set.
|
|
248
267
|
|
|
268
|
+
### Database Configuration
|
|
269
|
+
|
|
270
|
+
`DEFAULT_DATABASE` specifies the database name to use for graph operations. This is particularly important for Neo4j 5+ users:
|
|
271
|
+
|
|
272
|
+
- **Neo4j 5+**: The default database name is `neo4j` (not `default_db`)
|
|
273
|
+
- **Neo4j 4**: The default database name is `default_db`
|
|
274
|
+
- **FalkorDB**: The default graph name is `default_db`
|
|
275
|
+
|
|
276
|
+
If you encounter the error `Graph not found: default_db` when using Neo4j 5, set:
|
|
277
|
+
|
|
278
|
+
```bash
|
|
279
|
+
export DEFAULT_DATABASE=neo4j
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
Or add to your `.env` file:
|
|
283
|
+
|
|
284
|
+
```
|
|
285
|
+
DEFAULT_DATABASE=neo4j
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
### Performance Configuration
|
|
289
|
+
|
|
249
290
|
`USE_PARALLEL_RUNTIME` is an optional boolean variable that can be set to true if you wish
|
|
250
291
|
to enable Neo4j's parallel runtime feature for several of our search queries.
|
|
251
292
|
Note that this feature is not supported for Neo4j Community edition or for smaller AuraDB instances,
|
|
@@ -137,7 +137,18 @@ or
|
|
|
137
137
|
uv add graphiti-core
|
|
138
138
|
```
|
|
139
139
|
|
|
140
|
-
|
|
140
|
+
### Installing with FalkorDB Support
|
|
141
|
+
|
|
142
|
+
If you plan to use FalkorDB as your graph database backend, install with the FalkorDB extra:
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
pip install graphiti-core[falkordb]
|
|
146
|
+
|
|
147
|
+
# or with uv
|
|
148
|
+
uv add graphiti-core[falkordb]
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### You can also install optional LLM providers as extras:
|
|
141
152
|
|
|
142
153
|
```bash
|
|
143
154
|
# Install with Anthropic support
|
|
@@ -151,6 +162,9 @@ pip install graphiti-core[google-genai]
|
|
|
151
162
|
|
|
152
163
|
# Install with multiple providers
|
|
153
164
|
pip install graphiti-core[anthropic,groq,google-genai]
|
|
165
|
+
|
|
166
|
+
# Install with FalkorDB and LLM providers
|
|
167
|
+
pip install graphiti-core[falkordb,anthropic,google-genai]
|
|
154
168
|
```
|
|
155
169
|
|
|
156
170
|
## Quick Start
|
|
@@ -199,6 +213,28 @@ In addition to the Neo4j and OpenAi-compatible credentials, Graphiti also has a
|
|
|
199
213
|
If you are using one of our supported models, such as Anthropic or Voyage models, the necessary environment variables
|
|
200
214
|
must be set.
|
|
201
215
|
|
|
216
|
+
### Database Configuration
|
|
217
|
+
|
|
218
|
+
`DEFAULT_DATABASE` specifies the database name to use for graph operations. This is particularly important for Neo4j 5+ users:
|
|
219
|
+
|
|
220
|
+
- **Neo4j 5+**: The default database name is `neo4j` (not `default_db`)
|
|
221
|
+
- **Neo4j 4**: The default database name is `default_db`
|
|
222
|
+
- **FalkorDB**: The default graph name is `default_db`
|
|
223
|
+
|
|
224
|
+
If you encounter the error `Graph not found: default_db` when using Neo4j 5, set:
|
|
225
|
+
|
|
226
|
+
```bash
|
|
227
|
+
export DEFAULT_DATABASE=neo4j
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
Or add to your `.env` file:
|
|
231
|
+
|
|
232
|
+
```
|
|
233
|
+
DEFAULT_DATABASE=neo4j
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
### Performance Configuration
|
|
237
|
+
|
|
202
238
|
`USE_PARALLEL_RUNTIME` is an optional boolean variable that can be set to true if you wish
|
|
203
239
|
to enable Neo4j's parallel runtime feature for several of our search queries.
|
|
204
240
|
Note that this feature is not supported for Neo4j Community edition or for smaller AuraDB instances,
|
|
@@ -25,6 +25,8 @@ from pydantic import BaseModel, Field
|
|
|
25
25
|
from transcript_parser import parse_podcast_messages
|
|
26
26
|
|
|
27
27
|
from graphiti_core import Graphiti
|
|
28
|
+
from graphiti_core.nodes import EpisodeType
|
|
29
|
+
from graphiti_core.utils.bulk_utils import RawEpisode
|
|
28
30
|
from graphiti_core.utils.maintenance.graph_data_operations import clear_data
|
|
29
31
|
|
|
30
32
|
load_dotenv()
|
|
@@ -67,7 +69,7 @@ class IsPresidentOf(BaseModel):
|
|
|
67
69
|
"""Relationship between a person and the entity they are a president of"""
|
|
68
70
|
|
|
69
71
|
|
|
70
|
-
async def main():
|
|
72
|
+
async def main(use_bulk: bool = False):
|
|
71
73
|
setup_logging()
|
|
72
74
|
client = Graphiti(neo4j_uri, neo4j_user, neo4j_password)
|
|
73
75
|
await clear_data(client.driver)
|
|
@@ -75,21 +77,43 @@ async def main():
|
|
|
75
77
|
messages = parse_podcast_messages()
|
|
76
78
|
group_id = str(uuid4())
|
|
77
79
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
80
|
+
raw_episodes: list[RawEpisode] = []
|
|
81
|
+
for i, message in enumerate(messages[3:7]):
|
|
82
|
+
raw_episodes.append(
|
|
83
|
+
RawEpisode(
|
|
84
|
+
name=f'Message {i}',
|
|
85
|
+
content=f'{message.speaker_name} ({message.role}): {message.content}',
|
|
86
|
+
reference_time=message.actual_timestamp,
|
|
87
|
+
source=EpisodeType.message,
|
|
88
|
+
source_description='Podcast Transcript',
|
|
89
|
+
)
|
|
90
|
+
)
|
|
91
|
+
if use_bulk:
|
|
92
|
+
await client.add_episode_bulk(
|
|
93
|
+
raw_episodes,
|
|
87
94
|
group_id=group_id,
|
|
88
95
|
entity_types={'Person': Person},
|
|
89
96
|
edge_types={'IS_PRESIDENT_OF': IsPresidentOf},
|
|
90
97
|
edge_type_map={('Person', 'Entity'): ['PRESIDENT_OF']},
|
|
91
|
-
previous_episode_uuids=episode_uuids,
|
|
92
98
|
)
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
99
|
+
else:
|
|
100
|
+
for i, message in enumerate(messages[3:14]):
|
|
101
|
+
episodes = await client.retrieve_episodes(
|
|
102
|
+
message.actual_timestamp, 3, group_ids=[group_id]
|
|
103
|
+
)
|
|
104
|
+
episode_uuids = [episode.uuid for episode in episodes]
|
|
105
|
+
|
|
106
|
+
await client.add_episode(
|
|
107
|
+
name=f'Message {i}',
|
|
108
|
+
episode_body=f'{message.speaker_name} ({message.role}): {message.content}',
|
|
109
|
+
reference_time=message.actual_timestamp,
|
|
110
|
+
source_description='Podcast Transcript',
|
|
111
|
+
group_id=group_id,
|
|
112
|
+
entity_types={'Person': Person},
|
|
113
|
+
edge_types={'IS_PRESIDENT_OF': IsPresidentOf},
|
|
114
|
+
edge_type_map={('Person', 'Entity'): ['PRESIDENT_OF']},
|
|
115
|
+
previous_episode_uuids=episode_uuids,
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
asyncio.run(main(True))
|
|
@@ -41,6 +41,9 @@ export NEO4J_PASSWORD=password
|
|
|
41
41
|
|
|
42
42
|
# Optional FalkorDB connection parameters (defaults shown)
|
|
43
43
|
export FALKORDB_URI=falkor://localhost:6379
|
|
44
|
+
|
|
45
|
+
# Database configuration (required for Neo4j 5+)
|
|
46
|
+
export DEFAULT_DATABASE=neo4j
|
|
44
47
|
```
|
|
45
48
|
|
|
46
49
|
3. Run the example:
|
|
@@ -71,6 +74,26 @@ After running this example, you can:
|
|
|
71
74
|
4. Try other predefined search recipes from `graphiti_core.search.search_config_recipes`
|
|
72
75
|
5. Explore the more advanced examples in the other directories
|
|
73
76
|
|
|
77
|
+
## Troubleshooting
|
|
78
|
+
|
|
79
|
+
### "Graph not found: default_db" Error
|
|
80
|
+
|
|
81
|
+
If you encounter the error `Neo.ClientError.Database.DatabaseNotFound: Graph not found: default_db`, this typically occurs with Neo4j 5+ where the default database name is `neo4j` instead of `default_db`.
|
|
82
|
+
|
|
83
|
+
**Solution:**
|
|
84
|
+
Set the `DEFAULT_DATABASE` environment variable to `neo4j`:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
export DEFAULT_DATABASE=neo4j
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Or add it to your `.env` file:
|
|
91
|
+
```
|
|
92
|
+
DEFAULT_DATABASE=neo4j
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
This tells Graphiti to use the correct database name for your Neo4j version.
|
|
96
|
+
|
|
74
97
|
## Understanding the Output
|
|
75
98
|
|
|
76
99
|
### Edge Search Results
|