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.

Files changed (184) hide show
  1. graphiti_core-0.16.0/.github/ISSUE_TEMPLATE/bug_report.md +54 -0
  2. graphiti_core-0.16.0/.github/pull_request_template.md +32 -0
  3. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/.github/workflows/cla.yml +1 -1
  4. graphiti_core-0.16.0/.github/workflows/claude-code-review.yml +78 -0
  5. graphiti_core-0.16.0/.github/workflows/claude.yml +64 -0
  6. graphiti_core-0.16.0/.github/workflows/mcp-server-docker.yml +73 -0
  7. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/CLAUDE.md +4 -3
  8. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/CONTRIBUTING.md +62 -1
  9. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/PKG-INFO +45 -4
  10. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/README.md +37 -1
  11. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/examples/podcast/podcast_runner.py +38 -14
  12. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/examples/quickstart/README.md +23 -0
  13. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/examples/quickstart/quickstart_falkordb.py +5 -2
  14. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/cross_encoder/__init__.py +1 -2
  15. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/cross_encoder/bge_reranker_client.py +12 -2
  16. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/cross_encoder/gemini_reranker_client.py +19 -4
  17. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/cross_encoder/openai_reranker_client.py +5 -3
  18. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/driver/__init__.py +1 -2
  19. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/driver/falkordb_driver.py +15 -4
  20. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/embedder/gemini.py +31 -7
  21. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/embedder/voyage.py +12 -1
  22. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/graphiti.py +107 -53
  23. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/llm_client/anthropic_client.py +17 -4
  24. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/llm_client/gemini_client.py +24 -8
  25. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/llm_client/groq_client.py +14 -3
  26. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/nodes.py +4 -4
  27. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/prompts/dedupe_edges.py +5 -4
  28. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/prompts/dedupe_nodes.py +3 -3
  29. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/search/search_utils.py +4 -2
  30. graphiti_core-0.16.0/graphiti_core/utils/bulk_utils.py +438 -0
  31. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/utils/maintenance/edge_operations.py +34 -120
  32. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/utils/maintenance/graph_data_operations.py +2 -1
  33. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/utils/maintenance/node_operations.py +11 -58
  34. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/mcp_server/README.md +19 -3
  35. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/mcp_server/docker-compose.yml +4 -3
  36. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/mcp_server/graphiti_mcp_server.py +41 -32
  37. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/mcp_server/pyproject.toml +1 -1
  38. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/pyproject.toml +5 -2
  39. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/signatures/version1/cla.json +40 -0
  40. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/driver/test_falkordb_driver.py +41 -65
  41. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/test_graphiti_falkordb_int.py +4 -10
  42. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/test_graphiti_int.py +6 -1
  43. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/test_node_falkordb_int.py +6 -15
  44. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/uv.lock +14 -4
  45. graphiti_core-0.15.0/graphiti_core/utils/bulk_utils.py +0 -482
  46. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/.env.example +0 -0
  47. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/.github/dependabot.yml +0 -0
  48. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/.github/secret_scanning.yml +0 -0
  49. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/.github/workflows/codeql.yml +0 -0
  50. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/.github/workflows/lint.yml +0 -0
  51. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/.github/workflows/release-graphiti-core.yml +0 -0
  52. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/.github/workflows/typecheck.yml +0 -0
  53. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/.github/workflows/unit_tests.yml +0 -0
  54. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/.gitignore +0 -0
  55. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/CODE_OF_CONDUCT.md +0 -0
  56. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/Dockerfile +0 -0
  57. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/LICENSE +0 -0
  58. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/Makefile +0 -0
  59. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/SECURITY.md +0 -0
  60. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/Zep-CLA.md +0 -0
  61. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/conftest.py +0 -0
  62. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/depot.json +0 -0
  63. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/docker-compose.test.yml +0 -0
  64. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/docker-compose.yml +0 -0
  65. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/ellipsis.yaml +0 -0
  66. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/examples/data/manybirds_products.json +0 -0
  67. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/examples/ecommerce/runner.ipynb +0 -0
  68. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/examples/ecommerce/runner.py +0 -0
  69. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/examples/langgraph-agent/agent.ipynb +0 -0
  70. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/examples/langgraph-agent/tinybirds-jess.png +0 -0
  71. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/examples/podcast/podcast_transcript.txt +0 -0
  72. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/examples/podcast/transcript_parser.py +0 -0
  73. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/examples/quickstart/quickstart_neo4j.py +0 -0
  74. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/examples/quickstart/requirements.txt +0 -0
  75. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/examples/wizard_of_oz/parser.py +0 -0
  76. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/examples/wizard_of_oz/runner.py +0 -0
  77. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/examples/wizard_of_oz/woo.txt +0 -0
  78. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/__init__.py +0 -0
  79. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/cross_encoder/client.py +0 -0
  80. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/driver/driver.py +0 -0
  81. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/driver/neo4j_driver.py +0 -0
  82. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/edges.py +0 -0
  83. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/embedder/__init__.py +0 -0
  84. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/embedder/azure_openai.py +0 -0
  85. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/embedder/client.py +0 -0
  86. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/embedder/openai.py +0 -0
  87. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/errors.py +0 -0
  88. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/graph_queries.py +0 -0
  89. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/graphiti_types.py +0 -0
  90. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/helpers.py +0 -0
  91. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/llm_client/__init__.py +0 -0
  92. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/llm_client/azure_openai_client.py +0 -0
  93. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/llm_client/client.py +0 -0
  94. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/llm_client/config.py +0 -0
  95. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/llm_client/errors.py +0 -0
  96. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/llm_client/openai_base_client.py +0 -0
  97. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/llm_client/openai_client.py +0 -0
  98. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/llm_client/openai_generic_client.py +0 -0
  99. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/llm_client/utils.py +0 -0
  100. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/models/__init__.py +0 -0
  101. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/models/edges/__init__.py +0 -0
  102. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/models/edges/edge_db_queries.py +0 -0
  103. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/models/nodes/__init__.py +0 -0
  104. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/models/nodes/node_db_queries.py +0 -0
  105. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/prompts/__init__.py +0 -0
  106. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/prompts/eval.py +0 -0
  107. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/prompts/extract_edge_dates.py +0 -0
  108. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/prompts/extract_edges.py +0 -0
  109. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/prompts/extract_nodes.py +0 -0
  110. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/prompts/invalidate_edges.py +0 -0
  111. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/prompts/lib.py +0 -0
  112. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/prompts/models.py +0 -0
  113. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/prompts/prompt_helpers.py +0 -0
  114. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/prompts/summarize_nodes.py +0 -0
  115. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/py.typed +0 -0
  116. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/search/__init__.py +0 -0
  117. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/search/search.py +0 -0
  118. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/search/search_config.py +0 -0
  119. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/search/search_config_recipes.py +0 -0
  120. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/search/search_filters.py +0 -0
  121. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/search/search_helpers.py +0 -0
  122. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/telemetry/__init__.py +0 -0
  123. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/telemetry/telemetry.py +0 -0
  124. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/utils/__init__.py +0 -0
  125. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/utils/datetime_utils.py +0 -0
  126. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/utils/maintenance/__init__.py +0 -0
  127. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/utils/maintenance/community_operations.py +0 -0
  128. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/utils/maintenance/temporal_operations.py +0 -0
  129. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/utils/maintenance/utils.py +0 -0
  130. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/graphiti_core/utils/ontology_utils/entity_types_utils.py +0 -0
  131. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/images/arxiv-screenshot.png +0 -0
  132. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/images/graphiti-graph-intro.gif +0 -0
  133. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/images/graphiti-intro-slides-stock-2.gif +0 -0
  134. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/images/simple_graph.svg +0 -0
  135. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/mcp_server/.env.example +0 -0
  136. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/mcp_server/.python-version +0 -0
  137. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/mcp_server/Dockerfile +0 -0
  138. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/mcp_server/cursor_rules.md +0 -0
  139. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/mcp_server/mcp_config_sse_example.json +0 -0
  140. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/mcp_server/mcp_config_stdio_example.json +0 -0
  141. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/mcp_server/uv.lock +0 -0
  142. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/poetry.lock +0 -0
  143. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/py.typed +0 -0
  144. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/pytest.ini +0 -0
  145. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/server/.env.example +0 -0
  146. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/server/Makefile +0 -0
  147. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/server/README.md +0 -0
  148. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/server/graph_service/__init__.py +0 -0
  149. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/server/graph_service/config.py +0 -0
  150. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/server/graph_service/dto/__init__.py +0 -0
  151. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/server/graph_service/dto/common.py +0 -0
  152. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/server/graph_service/dto/ingest.py +0 -0
  153. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/server/graph_service/dto/retrieve.py +0 -0
  154. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/server/graph_service/main.py +0 -0
  155. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/server/graph_service/routers/__init__.py +0 -0
  156. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/server/graph_service/routers/ingest.py +0 -0
  157. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/server/graph_service/routers/retrieve.py +0 -0
  158. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/server/graph_service/zep_graphiti.py +0 -0
  159. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/server/pyproject.toml +0 -0
  160. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/server/uv.lock +0 -0
  161. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/cross_encoder/test_bge_reranker_client.py +0 -0
  162. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/cross_encoder/test_gemini_reranker_client.py +0 -0
  163. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/driver/__init__.py +0 -0
  164. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/embedder/embedder_fixtures.py +0 -0
  165. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/embedder/test_gemini.py +0 -0
  166. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/embedder/test_openai.py +0 -0
  167. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/embedder/test_voyage.py +0 -0
  168. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/evals/data/longmemeval_data/README.md +0 -0
  169. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/evals/data/longmemeval_data/longmemeval_oracle.json +0 -0
  170. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/evals/eval_cli.py +0 -0
  171. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/evals/eval_e2e_graph_building.py +0 -0
  172. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/evals/pytest.ini +0 -0
  173. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/evals/utils.py +0 -0
  174. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/helpers_test.py +0 -0
  175. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/llm_client/test_anthropic_client.py +0 -0
  176. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/llm_client/test_anthropic_client_int.py +0 -0
  177. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/llm_client/test_client.py +0 -0
  178. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/llm_client/test_errors.py +0 -0
  179. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/llm_client/test_gemini_client.py +0 -0
  180. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/test_entity_exclusion_int.py +0 -0
  181. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/test_node_int.py +0 -0
  182. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/utils/maintenance/test_edge_operations.py +0 -0
  183. {graphiti_core-0.15.0 → graphiti_core-0.16.0}/tests/utils/maintenance/test_temporal_operations_int.py +0 -0
  184. {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 + mypy type checking)
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 MyPy is enforced
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
- - Mypy for static type checking
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.15.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: falkord-db
41
- Requires-Dist: falkordb<2.0.0,>=1.1.2; extra == 'falkord-db'
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
- You can also install optional LLM providers as extras:
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
- You can also install optional LLM providers as extras:
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
- for i, message in enumerate(messages[3:14]):
79
- episodes = await client.retrieve_episodes(message.actual_timestamp, 3, group_ids=[group_id])
80
- episode_uuids = [episode.uuid for episode in episodes]
81
-
82
- await client.add_episode(
83
- name=f'Message {i}',
84
- episode_body=f'{message.speaker_name} ({message.role}): {message.content}',
85
- reference_time=message.actual_timestamp,
86
- source_description='Podcast Transcript',
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
- asyncio.run(main())
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