graphiti-core 0.18.5__tar.gz → 0.18.6__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 (182) hide show
  1. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/PKG-INFO +1 -1
  2. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/graphiti.py +1 -1
  3. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/search/search_filters.py +47 -8
  4. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/pyproject.toml +1 -1
  5. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/tests/test_graphiti_int.py +5 -1
  6. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/uv.lock +2 -2
  7. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/.env.example +0 -0
  8. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  9. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/.github/dependabot.yml +0 -0
  10. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/.github/pull_request_template.md +0 -0
  11. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/.github/secret_scanning.yml +0 -0
  12. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/.github/workflows/cla.yml +0 -0
  13. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/.github/workflows/claude-code-review.yml +0 -0
  14. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/.github/workflows/claude.yml +0 -0
  15. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/.github/workflows/codeql.yml +0 -0
  16. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/.github/workflows/lint.yml +0 -0
  17. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/.github/workflows/mcp-server-docker.yml +0 -0
  18. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/.github/workflows/release-graphiti-core.yml +0 -0
  19. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/.github/workflows/typecheck.yml +0 -0
  20. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/.github/workflows/unit_tests.yml +0 -0
  21. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/.gitignore +0 -0
  22. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/CLAUDE.md +0 -0
  23. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/CODE_OF_CONDUCT.md +0 -0
  24. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/CONTRIBUTING.md +0 -0
  25. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/Dockerfile +0 -0
  26. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/LICENSE +0 -0
  27. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/Makefile +0 -0
  28. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/README.md +0 -0
  29. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/SECURITY.md +0 -0
  30. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/Zep-CLA.md +0 -0
  31. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/conftest.py +0 -0
  32. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/depot.json +0 -0
  33. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/docker-compose.test.yml +0 -0
  34. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/docker-compose.yml +0 -0
  35. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/ellipsis.yaml +0 -0
  36. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/examples/data/manybirds_products.json +0 -0
  37. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/examples/ecommerce/runner.ipynb +0 -0
  38. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/examples/ecommerce/runner.py +0 -0
  39. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/examples/langgraph-agent/agent.ipynb +0 -0
  40. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/examples/langgraph-agent/tinybirds-jess.png +0 -0
  41. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/examples/podcast/podcast_runner.py +0 -0
  42. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/examples/podcast/podcast_transcript.txt +0 -0
  43. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/examples/podcast/transcript_parser.py +0 -0
  44. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/examples/quickstart/README.md +0 -0
  45. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/examples/quickstart/quickstart_falkordb.py +0 -0
  46. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/examples/quickstart/quickstart_neo4j.py +0 -0
  47. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/examples/quickstart/requirements.txt +0 -0
  48. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/examples/wizard_of_oz/parser.py +0 -0
  49. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/examples/wizard_of_oz/runner.py +0 -0
  50. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/examples/wizard_of_oz/woo.txt +0 -0
  51. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/__init__.py +0 -0
  52. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/cross_encoder/__init__.py +0 -0
  53. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/cross_encoder/bge_reranker_client.py +0 -0
  54. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/cross_encoder/client.py +0 -0
  55. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/cross_encoder/gemini_reranker_client.py +0 -0
  56. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/cross_encoder/openai_reranker_client.py +0 -0
  57. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/driver/__init__.py +0 -0
  58. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/driver/driver.py +0 -0
  59. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/driver/falkordb_driver.py +0 -0
  60. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/driver/neo4j_driver.py +0 -0
  61. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/edges.py +0 -0
  62. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/embedder/__init__.py +0 -0
  63. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/embedder/azure_openai.py +0 -0
  64. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/embedder/client.py +0 -0
  65. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/embedder/gemini.py +0 -0
  66. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/embedder/openai.py +0 -0
  67. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/embedder/voyage.py +0 -0
  68. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/errors.py +0 -0
  69. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/graph_queries.py +0 -0
  70. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/graphiti_types.py +0 -0
  71. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/helpers.py +0 -0
  72. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/llm_client/__init__.py +0 -0
  73. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/llm_client/anthropic_client.py +0 -0
  74. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/llm_client/azure_openai_client.py +0 -0
  75. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/llm_client/client.py +0 -0
  76. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/llm_client/config.py +0 -0
  77. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/llm_client/errors.py +0 -0
  78. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/llm_client/gemini_client.py +0 -0
  79. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/llm_client/groq_client.py +0 -0
  80. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/llm_client/openai_base_client.py +0 -0
  81. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/llm_client/openai_client.py +0 -0
  82. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/llm_client/openai_generic_client.py +0 -0
  83. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/llm_client/utils.py +0 -0
  84. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/models/__init__.py +0 -0
  85. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/models/edges/__init__.py +0 -0
  86. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/models/edges/edge_db_queries.py +0 -0
  87. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/models/nodes/__init__.py +0 -0
  88. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/models/nodes/node_db_queries.py +0 -0
  89. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/nodes.py +0 -0
  90. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/prompts/__init__.py +0 -0
  91. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/prompts/dedupe_edges.py +0 -0
  92. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/prompts/dedupe_nodes.py +0 -0
  93. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/prompts/eval.py +0 -0
  94. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/prompts/extract_edge_dates.py +0 -0
  95. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/prompts/extract_edges.py +0 -0
  96. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/prompts/extract_nodes.py +0 -0
  97. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/prompts/invalidate_edges.py +0 -0
  98. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/prompts/lib.py +0 -0
  99. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/prompts/models.py +0 -0
  100. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/prompts/prompt_helpers.py +0 -0
  101. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/prompts/summarize_nodes.py +0 -0
  102. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/py.typed +0 -0
  103. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/search/__init__.py +0 -0
  104. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/search/search.py +0 -0
  105. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/search/search_config.py +0 -0
  106. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/search/search_config_recipes.py +0 -0
  107. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/search/search_helpers.py +0 -0
  108. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/search/search_utils.py +0 -0
  109. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/telemetry/__init__.py +0 -0
  110. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/telemetry/telemetry.py +0 -0
  111. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/utils/__init__.py +0 -0
  112. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/utils/bulk_utils.py +0 -0
  113. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/utils/datetime_utils.py +0 -0
  114. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/utils/maintenance/__init__.py +0 -0
  115. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/utils/maintenance/community_operations.py +0 -0
  116. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/utils/maintenance/edge_operations.py +0 -0
  117. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/utils/maintenance/graph_data_operations.py +0 -0
  118. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/utils/maintenance/node_operations.py +0 -0
  119. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/utils/maintenance/temporal_operations.py +0 -0
  120. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/utils/maintenance/utils.py +0 -0
  121. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/graphiti_core/utils/ontology_utils/entity_types_utils.py +0 -0
  122. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/images/arxiv-screenshot.png +0 -0
  123. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/images/graphiti-graph-intro.gif +0 -0
  124. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/images/graphiti-intro-slides-stock-2.gif +0 -0
  125. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/images/simple_graph.svg +0 -0
  126. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/mcp_server/.env.example +0 -0
  127. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/mcp_server/.python-version +0 -0
  128. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/mcp_server/Dockerfile +0 -0
  129. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/mcp_server/README.md +0 -0
  130. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/mcp_server/cursor_rules.md +0 -0
  131. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/mcp_server/docker-compose.yml +0 -0
  132. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/mcp_server/graphiti_mcp_server.py +0 -0
  133. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/mcp_server/mcp_config_sse_example.json +0 -0
  134. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/mcp_server/mcp_config_stdio_example.json +0 -0
  135. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/mcp_server/pyproject.toml +0 -0
  136. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/mcp_server/uv.lock +0 -0
  137. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/poetry.lock +0 -0
  138. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/py.typed +0 -0
  139. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/pytest.ini +0 -0
  140. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/server/.env.example +0 -0
  141. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/server/Makefile +0 -0
  142. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/server/README.md +0 -0
  143. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/server/graph_service/__init__.py +0 -0
  144. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/server/graph_service/config.py +0 -0
  145. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/server/graph_service/dto/__init__.py +0 -0
  146. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/server/graph_service/dto/common.py +0 -0
  147. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/server/graph_service/dto/ingest.py +0 -0
  148. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/server/graph_service/dto/retrieve.py +0 -0
  149. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/server/graph_service/main.py +0 -0
  150. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/server/graph_service/routers/__init__.py +0 -0
  151. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/server/graph_service/routers/ingest.py +0 -0
  152. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/server/graph_service/routers/retrieve.py +0 -0
  153. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/server/graph_service/zep_graphiti.py +0 -0
  154. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/server/pyproject.toml +0 -0
  155. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/server/uv.lock +0 -0
  156. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/signatures/version1/cla.json +0 -0
  157. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/tests/cross_encoder/test_bge_reranker_client.py +0 -0
  158. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/tests/cross_encoder/test_gemini_reranker_client.py +0 -0
  159. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/tests/driver/__init__.py +0 -0
  160. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/tests/driver/test_falkordb_driver.py +0 -0
  161. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/tests/embedder/embedder_fixtures.py +0 -0
  162. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/tests/embedder/test_gemini.py +0 -0
  163. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/tests/embedder/test_openai.py +0 -0
  164. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/tests/embedder/test_voyage.py +0 -0
  165. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/tests/evals/data/longmemeval_data/README.md +0 -0
  166. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/tests/evals/data/longmemeval_data/longmemeval_oracle.json +0 -0
  167. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/tests/evals/eval_cli.py +0 -0
  168. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/tests/evals/eval_e2e_graph_building.py +0 -0
  169. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/tests/evals/pytest.ini +0 -0
  170. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/tests/evals/utils.py +0 -0
  171. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/tests/helpers_test.py +0 -0
  172. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/tests/llm_client/test_anthropic_client.py +0 -0
  173. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/tests/llm_client/test_anthropic_client_int.py +0 -0
  174. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/tests/llm_client/test_client.py +0 -0
  175. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/tests/llm_client/test_errors.py +0 -0
  176. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/tests/llm_client/test_gemini_client.py +0 -0
  177. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/tests/test_edge_int.py +0 -0
  178. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/tests/test_entity_exclusion_int.py +0 -0
  179. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/tests/test_node_int.py +0 -0
  180. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/tests/utils/maintenance/test_edge_operations.py +0 -0
  181. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/tests/utils/maintenance/test_temporal_operations_int.py +0 -0
  182. {graphiti_core-0.18.5 → graphiti_core-0.18.6}/tests/utils/search/search_utils_test.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: graphiti-core
3
- Version: 0.18.5
3
+ Version: 0.18.6
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
@@ -158,7 +158,7 @@ class Graphiti:
158
158
  If not set, the Graphiti default is used.
159
159
  ensure_ascii : bool, optional
160
160
  Whether to escape non-ASCII characters in JSON serialization for prompts. Defaults to False.
161
- Set to False to preserve non-ASCII characters (e.g., Korean, Japanese, Chinese) in their
161
+ Set as False to preserve non-ASCII characters (e.g., Korean, Japanese, Chinese) in their
162
162
  original form, making them readable in LLM logs and improving model understanding.
163
163
 
164
164
  Returns
@@ -28,6 +28,8 @@ class ComparisonOperator(Enum):
28
28
  less_than = '<'
29
29
  greater_than_equal = '>='
30
30
  less_than_equal = '<='
31
+ is_null = 'IS NULL'
32
+ is_not_null = 'IS NOT NULL'
31
33
 
32
34
 
33
35
  class DateFilter(BaseModel):
@@ -64,6 +66,19 @@ def node_search_filter_query_constructor(
64
66
  return filter_query, filter_params
65
67
 
66
68
 
69
+ def date_filter_query_constructor(
70
+ value_name: str, param_name: str, operator: ComparisonOperator
71
+ ) -> str:
72
+ query = '(' + value_name + ' '
73
+
74
+ if operator == ComparisonOperator.is_null or operator == ComparisonOperator.is_not_null:
75
+ query += operator.value + ')'
76
+ else:
77
+ query += operator.value + ' ' + param_name + ')'
78
+
79
+ return query
80
+
81
+
67
82
  def edge_search_filter_query_constructor(
68
83
  filters: SearchFilters,
69
84
  ) -> tuple[str, dict[str, Any]]:
@@ -85,10 +100,16 @@ def edge_search_filter_query_constructor(
85
100
  valid_at_filter = '\nAND ('
86
101
  for i, or_list in enumerate(filters.valid_at):
87
102
  for j, date_filter in enumerate(or_list):
88
- filter_params['valid_at_' + str(j)] = date_filter.date
103
+ if date_filter.comparison_operator not in [
104
+ ComparisonOperator.is_null,
105
+ ComparisonOperator.is_not_null,
106
+ ]:
107
+ filter_params['valid_at_' + str(j)] = date_filter.date
89
108
 
90
109
  and_filters = [
91
- '(e.valid_at ' + date_filter.comparison_operator.value + f' $valid_at_{j})'
110
+ date_filter_query_constructor(
111
+ 'e.valid_at', f'$valid_at_{j}', date_filter.comparison_operator
112
+ )
92
113
  for j, date_filter in enumerate(or_list)
93
114
  ]
94
115
  and_filter_query = ''
@@ -110,10 +131,16 @@ def edge_search_filter_query_constructor(
110
131
  invalid_at_filter = ' AND ('
111
132
  for i, or_list in enumerate(filters.invalid_at):
112
133
  for j, date_filter in enumerate(or_list):
113
- filter_params['invalid_at_' + str(j)] = date_filter.date
134
+ if date_filter.comparison_operator not in [
135
+ ComparisonOperator.is_null,
136
+ ComparisonOperator.is_not_null,
137
+ ]:
138
+ filter_params['invalid_at_' + str(j)] = date_filter.date
114
139
 
115
140
  and_filters = [
116
- '(e.invalid_at ' + date_filter.comparison_operator.value + f' $invalid_at_{j})'
141
+ date_filter_query_constructor(
142
+ 'e.invalid_at', f'$invalid_at_{j}', date_filter.comparison_operator
143
+ )
117
144
  for j, date_filter in enumerate(or_list)
118
145
  ]
119
146
  and_filter_query = ''
@@ -135,10 +162,16 @@ def edge_search_filter_query_constructor(
135
162
  created_at_filter = ' AND ('
136
163
  for i, or_list in enumerate(filters.created_at):
137
164
  for j, date_filter in enumerate(or_list):
138
- filter_params['created_at_' + str(j)] = date_filter.date
165
+ if date_filter.comparison_operator not in [
166
+ ComparisonOperator.is_null,
167
+ ComparisonOperator.is_not_null,
168
+ ]:
169
+ filter_params['created_at_' + str(j)] = date_filter.date
139
170
 
140
171
  and_filters = [
141
- '(e.created_at ' + date_filter.comparison_operator.value + f' $created_at_{j})'
172
+ date_filter_query_constructor(
173
+ 'e.created_at', f'$created_at_{j}', date_filter.comparison_operator
174
+ )
142
175
  for j, date_filter in enumerate(or_list)
143
176
  ]
144
177
  and_filter_query = ''
@@ -160,10 +193,16 @@ def edge_search_filter_query_constructor(
160
193
  expired_at_filter = ' AND ('
161
194
  for i, or_list in enumerate(filters.expired_at):
162
195
  for j, date_filter in enumerate(or_list):
163
- filter_params['expired_at_' + str(j)] = date_filter.date
196
+ if date_filter.comparison_operator not in [
197
+ ComparisonOperator.is_null,
198
+ ComparisonOperator.is_not_null,
199
+ ]:
200
+ filter_params['expired_at_' + str(j)] = date_filter.date
164
201
 
165
202
  and_filters = [
166
- '(e.expired_at ' + date_filter.comparison_operator.value + f' $expired_at_{j})'
203
+ date_filter_query_constructor(
204
+ 'e.expired_at', f'$expired_at_{j}', date_filter.comparison_operator
205
+ )
167
206
  for j, date_filter in enumerate(or_list)
168
207
  ]
169
208
  and_filter_query = ''
@@ -1,7 +1,7 @@
1
1
  [project]
2
2
  name = "graphiti-core"
3
3
  description = "A temporal graph building library"
4
- version = "0.18.5"
4
+ version = "0.18.6"
5
5
  authors = [
6
6
  { name = "Paul Paliychuk", email = "paul@getzep.com" },
7
7
  { name = "Preston Rasmussen", email = "preston@getzep.com" },
@@ -65,7 +65,11 @@ async def test_graphiti_init(driver):
65
65
 
66
66
  search_filter = SearchFilters(
67
67
  node_labels=['Person', 'City'],
68
- created_at=[[DateFilter(date=utc_now(), comparison_operator=ComparisonOperator.less_than)]],
68
+ created_at=[
69
+ [DateFilter(date=None, comparison_operator=ComparisonOperator.is_null)],
70
+ [DateFilter(date=utc_now(), comparison_operator=ComparisonOperator.less_than)],
71
+ [DateFilter(date=None, comparison_operator=ComparisonOperator.is_not_null)],
72
+ ],
69
73
  )
70
74
 
71
75
  results = await graphiti.search_(
@@ -1,5 +1,5 @@
1
1
  version = 1
2
- revision = 3
2
+ revision = 2
3
3
  requires-python = ">=3.10, <4"
4
4
  resolution-markers = [
5
5
  "python_full_version >= '3.14'",
@@ -746,7 +746,7 @@ wheels = [
746
746
 
747
747
  [[package]]
748
748
  name = "graphiti-core"
749
- version = "0.18.5"
749
+ version = "0.18.6"
750
750
  source = { editable = "." }
751
751
  dependencies = [
752
752
  { name = "diskcache" },
File without changes
File without changes
File without changes
File without changes
File without changes