graphiti-core 0.17.6__tar.gz → 0.17.8__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.17.6 → graphiti_core-0.17.8}/PKG-INFO +1 -1
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/driver/driver.py +3 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/driver/falkordb_driver.py +2 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/graphiti.py +8 -2
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/helpers.py +11 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/search/search_utils.py +21 -19
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/pyproject.toml +1 -1
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/signatures/version1/cla.json +32 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/uv.lock +1 -1
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/.env.example +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/.github/dependabot.yml +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/.github/pull_request_template.md +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/.github/secret_scanning.yml +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/.github/workflows/cla.yml +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/.github/workflows/claude-code-review.yml +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/.github/workflows/claude.yml +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/.github/workflows/codeql.yml +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/.github/workflows/lint.yml +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/.github/workflows/mcp-server-docker.yml +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/.github/workflows/release-graphiti-core.yml +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/.github/workflows/typecheck.yml +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/.github/workflows/unit_tests.yml +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/.gitignore +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/CLAUDE.md +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/CODE_OF_CONDUCT.md +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/CONTRIBUTING.md +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/Dockerfile +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/LICENSE +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/Makefile +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/README.md +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/SECURITY.md +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/Zep-CLA.md +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/conftest.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/depot.json +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/docker-compose.test.yml +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/docker-compose.yml +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/ellipsis.yaml +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/examples/data/manybirds_products.json +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/examples/ecommerce/runner.ipynb +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/examples/ecommerce/runner.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/examples/langgraph-agent/agent.ipynb +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/examples/langgraph-agent/tinybirds-jess.png +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/examples/podcast/podcast_runner.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/examples/podcast/podcast_transcript.txt +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/examples/podcast/transcript_parser.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/examples/quickstart/README.md +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/examples/quickstart/quickstart_falkordb.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/examples/quickstart/quickstart_neo4j.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/examples/quickstart/requirements.txt +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/examples/wizard_of_oz/parser.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/examples/wizard_of_oz/runner.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/examples/wizard_of_oz/woo.txt +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/__init__.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/cross_encoder/__init__.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/cross_encoder/bge_reranker_client.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/cross_encoder/client.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/cross_encoder/gemini_reranker_client.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/cross_encoder/openai_reranker_client.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/driver/__init__.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/driver/neo4j_driver.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/edges.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/embedder/__init__.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/embedder/azure_openai.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/embedder/client.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/embedder/gemini.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/embedder/openai.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/embedder/voyage.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/errors.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/graph_queries.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/graphiti_types.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/llm_client/__init__.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/llm_client/anthropic_client.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/llm_client/azure_openai_client.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/llm_client/client.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/llm_client/config.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/llm_client/errors.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/llm_client/gemini_client.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/llm_client/groq_client.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/llm_client/openai_base_client.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/llm_client/openai_client.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/llm_client/openai_generic_client.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/llm_client/utils.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/models/__init__.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/models/edges/__init__.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/models/edges/edge_db_queries.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/models/nodes/__init__.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/models/nodes/node_db_queries.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/nodes.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/prompts/__init__.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/prompts/dedupe_edges.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/prompts/dedupe_nodes.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/prompts/eval.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/prompts/extract_edge_dates.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/prompts/extract_edges.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/prompts/extract_nodes.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/prompts/invalidate_edges.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/prompts/lib.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/prompts/models.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/prompts/prompt_helpers.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/prompts/summarize_nodes.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/py.typed +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/search/__init__.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/search/search.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/search/search_config.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/search/search_config_recipes.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/search/search_filters.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/search/search_helpers.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/telemetry/__init__.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/telemetry/telemetry.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/utils/__init__.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/utils/bulk_utils.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/utils/datetime_utils.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/utils/maintenance/__init__.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/utils/maintenance/community_operations.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/utils/maintenance/edge_operations.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/utils/maintenance/graph_data_operations.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/utils/maintenance/node_operations.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/utils/maintenance/temporal_operations.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/utils/maintenance/utils.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/utils/ontology_utils/entity_types_utils.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/images/arxiv-screenshot.png +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/images/graphiti-graph-intro.gif +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/images/graphiti-intro-slides-stock-2.gif +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/images/simple_graph.svg +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/mcp_server/.env.example +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/mcp_server/.python-version +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/mcp_server/Dockerfile +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/mcp_server/README.md +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/mcp_server/cursor_rules.md +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/mcp_server/docker-compose.yml +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/mcp_server/graphiti_mcp_server.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/mcp_server/mcp_config_sse_example.json +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/mcp_server/mcp_config_stdio_example.json +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/mcp_server/pyproject.toml +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/mcp_server/uv.lock +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/poetry.lock +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/py.typed +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/pytest.ini +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/server/.env.example +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/server/Makefile +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/server/README.md +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/server/graph_service/__init__.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/server/graph_service/config.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/server/graph_service/dto/__init__.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/server/graph_service/dto/common.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/server/graph_service/dto/ingest.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/server/graph_service/dto/retrieve.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/server/graph_service/main.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/server/graph_service/routers/__init__.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/server/graph_service/routers/ingest.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/server/graph_service/routers/retrieve.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/server/graph_service/zep_graphiti.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/server/pyproject.toml +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/server/uv.lock +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/tests/cross_encoder/test_bge_reranker_client.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/tests/cross_encoder/test_gemini_reranker_client.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/tests/driver/__init__.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/tests/driver/test_falkordb_driver.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/tests/embedder/embedder_fixtures.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/tests/embedder/test_gemini.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/tests/embedder/test_openai.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/tests/embedder/test_voyage.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/tests/evals/data/longmemeval_data/README.md +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/tests/evals/data/longmemeval_data/longmemeval_oracle.json +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/tests/evals/eval_cli.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/tests/evals/eval_e2e_graph_building.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/tests/evals/pytest.ini +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/tests/evals/utils.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/tests/helpers_test.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/tests/llm_client/test_anthropic_client.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/tests/llm_client/test_anthropic_client_int.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/tests/llm_client/test_client.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/tests/llm_client/test_errors.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/tests/llm_client/test_gemini_client.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/tests/test_entity_exclusion_int.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/tests/test_graphiti_falkordb_int.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/tests/test_graphiti_int.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/tests/test_node_falkordb_int.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/tests/test_node_int.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/tests/utils/maintenance/test_edge_operations.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/tests/utils/maintenance/test_temporal_operations_int.py +0 -0
- {graphiti_core-0.17.6 → graphiti_core-0.17.8}/tests/utils/search/search_utils_test.py +0 -0
|
@@ -46,6 +46,9 @@ class GraphDriverSession(ABC):
|
|
|
46
46
|
|
|
47
47
|
class GraphDriver(ABC):
|
|
48
48
|
provider: str
|
|
49
|
+
fulltext_syntax: str = (
|
|
50
|
+
'' # Neo4j (default) syntax does not require a prefix for fulltext queries
|
|
51
|
+
)
|
|
49
52
|
|
|
50
53
|
@abstractmethod
|
|
51
54
|
def execute_query(self, cypher_query_: str, **kwargs: Any) -> Coroutine:
|
|
@@ -97,6 +97,8 @@ class FalkorDriver(GraphDriver):
|
|
|
97
97
|
self.client = FalkorDB(host=host, port=port, username=username, password=password)
|
|
98
98
|
self._database = database
|
|
99
99
|
|
|
100
|
+
self.fulltext_syntax = '@' # FalkorDB uses a redisearch-like syntax for fulltext queries see https://redis.io/docs/latest/develop/ai/search-and-query/query/full-text/
|
|
101
|
+
|
|
100
102
|
def _get_graph(self, graph_name: str | None) -> FalkorGraph:
|
|
101
103
|
# FalkorDB requires a non-None database name for multi-tenant graphs; the default is "default_db"
|
|
102
104
|
if graph_name is None:
|
|
@@ -30,6 +30,7 @@ from graphiti_core.edges import EntityEdge, EpisodicEdge
|
|
|
30
30
|
from graphiti_core.embedder import EmbedderClient, OpenAIEmbedder
|
|
31
31
|
from graphiti_core.graphiti_types import GraphitiClients
|
|
32
32
|
from graphiti_core.helpers import (
|
|
33
|
+
get_default_group_id,
|
|
33
34
|
semaphore_gather,
|
|
34
35
|
validate_excluded_entity_types,
|
|
35
36
|
validate_group_id,
|
|
@@ -352,7 +353,7 @@ class Graphiti:
|
|
|
352
353
|
source_description: str,
|
|
353
354
|
reference_time: datetime,
|
|
354
355
|
source: EpisodeType = EpisodeType.message,
|
|
355
|
-
group_id: str =
|
|
356
|
+
group_id: str | None = None,
|
|
356
357
|
uuid: str | None = None,
|
|
357
358
|
update_communities: bool = False,
|
|
358
359
|
entity_types: dict[str, BaseModel] | None = None,
|
|
@@ -420,7 +421,10 @@ class Graphiti:
|
|
|
420
421
|
start = time()
|
|
421
422
|
now = utc_now()
|
|
422
423
|
|
|
424
|
+
# if group_id is None, use the default group id by the provider
|
|
425
|
+
group_id = group_id or get_default_group_id(self.driver.provider)
|
|
423
426
|
validate_entity_types(entity_types)
|
|
427
|
+
|
|
424
428
|
validate_excluded_entity_types(excluded_entity_types, entity_types)
|
|
425
429
|
validate_group_id(group_id)
|
|
426
430
|
|
|
@@ -537,7 +541,7 @@ class Graphiti:
|
|
|
537
541
|
async def add_episode_bulk(
|
|
538
542
|
self,
|
|
539
543
|
bulk_episodes: list[RawEpisode],
|
|
540
|
-
group_id: str =
|
|
544
|
+
group_id: str | None = None,
|
|
541
545
|
entity_types: dict[str, BaseModel] | None = None,
|
|
542
546
|
excluded_entity_types: list[str] | None = None,
|
|
543
547
|
edge_types: dict[str, BaseModel] | None = None,
|
|
@@ -583,6 +587,8 @@ class Graphiti:
|
|
|
583
587
|
start = time()
|
|
584
588
|
now = utc_now()
|
|
585
589
|
|
|
590
|
+
# if group_id is None, use the default group id by the provider
|
|
591
|
+
group_id = group_id or get_default_group_id(self.driver.provider)
|
|
586
592
|
validate_group_id(group_id)
|
|
587
593
|
|
|
588
594
|
# Create default edge type map
|
|
@@ -52,6 +52,17 @@ def parse_db_date(neo_date: neo4j_time.DateTime | str | None) -> datetime | None
|
|
|
52
52
|
)
|
|
53
53
|
|
|
54
54
|
|
|
55
|
+
def get_default_group_id(db_type: str) -> str:
|
|
56
|
+
"""
|
|
57
|
+
This function differentiates the default group id based on the database type.
|
|
58
|
+
For most databases, the default group id is an empty string, while there are database types that require a specific default group id.
|
|
59
|
+
"""
|
|
60
|
+
if db_type == 'falkordb':
|
|
61
|
+
return '_'
|
|
62
|
+
else:
|
|
63
|
+
return ''
|
|
64
|
+
|
|
65
|
+
|
|
55
66
|
def lucene_sanitize(query: str) -> str:
|
|
56
67
|
# Escape special characters from a query before passing into Lucene
|
|
57
68
|
# + - && || ! ( ) { } [ ] ^ " ~ * ? : \ /
|
|
@@ -57,12 +57,14 @@ RELEVANT_SCHEMA_LIMIT = 10
|
|
|
57
57
|
DEFAULT_MIN_SCORE = 0.6
|
|
58
58
|
DEFAULT_MMR_LAMBDA = 0.5
|
|
59
59
|
MAX_SEARCH_DEPTH = 3
|
|
60
|
-
MAX_QUERY_LENGTH =
|
|
60
|
+
MAX_QUERY_LENGTH = 128
|
|
61
61
|
|
|
62
62
|
|
|
63
|
-
def fulltext_query(query: str, group_ids: list[str] | None = None):
|
|
63
|
+
def fulltext_query(query: str, group_ids: list[str] | None = None, fulltext_syntax: str = ''):
|
|
64
64
|
group_ids_filter_list = (
|
|
65
|
-
[f
|
|
65
|
+
[fulltext_syntax + f"group_id:'{lucene_sanitize(g)}'" for g in group_ids]
|
|
66
|
+
if group_ids is not None
|
|
67
|
+
else []
|
|
66
68
|
)
|
|
67
69
|
group_ids_filter = ''
|
|
68
70
|
for f in group_ids_filter_list:
|
|
@@ -157,7 +159,7 @@ async def edge_fulltext_search(
|
|
|
157
159
|
limit=RELEVANT_SCHEMA_LIMIT,
|
|
158
160
|
) -> list[EntityEdge]:
|
|
159
161
|
# fulltext search over facts
|
|
160
|
-
fuzzy_query = fulltext_query(query, group_ids)
|
|
162
|
+
fuzzy_query = fulltext_query(query, group_ids, driver.fulltext_syntax)
|
|
161
163
|
if fuzzy_query == '':
|
|
162
164
|
return []
|
|
163
165
|
|
|
@@ -293,12 +295,12 @@ async def edge_bfs_search(
|
|
|
293
295
|
|
|
294
296
|
query = (
|
|
295
297
|
"""
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
298
|
+
UNWIND $bfs_origin_node_uuids AS origin_uuid
|
|
299
|
+
MATCH path = (origin:Entity|Episodic {uuid: origin_uuid})-[:RELATES_TO|MENTIONS]->{1,3}(n:Entity)
|
|
300
|
+
UNWIND relationships(path) AS rel
|
|
301
|
+
MATCH (n:Entity)-[r:RELATES_TO]-(m:Entity)
|
|
302
|
+
WHERE r.uuid = rel.uuid
|
|
303
|
+
"""
|
|
302
304
|
+ filter_query
|
|
303
305
|
+ """
|
|
304
306
|
RETURN DISTINCT
|
|
@@ -340,7 +342,7 @@ async def node_fulltext_search(
|
|
|
340
342
|
limit=RELEVANT_SCHEMA_LIMIT,
|
|
341
343
|
) -> list[EntityNode]:
|
|
342
344
|
# BM25 search to get top nodes
|
|
343
|
-
fuzzy_query = fulltext_query(query, group_ids)
|
|
345
|
+
fuzzy_query = fulltext_query(query, group_ids, driver.fulltext_syntax)
|
|
344
346
|
if fuzzy_query == '':
|
|
345
347
|
return []
|
|
346
348
|
filter_query, filter_params = node_search_filter_query_constructor(search_filter)
|
|
@@ -351,7 +353,7 @@ async def node_fulltext_search(
|
|
|
351
353
|
YIELD node AS n, score
|
|
352
354
|
WITH n, score
|
|
353
355
|
LIMIT $limit
|
|
354
|
-
WHERE n:Entity
|
|
356
|
+
WHERE n:Entity AND n.group_id IN $group_ids
|
|
355
357
|
"""
|
|
356
358
|
+ filter_query
|
|
357
359
|
+ ENTITY_NODE_RETURN
|
|
@@ -441,10 +443,10 @@ async def node_bfs_search(
|
|
|
441
443
|
|
|
442
444
|
query = (
|
|
443
445
|
"""
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
446
|
+
UNWIND $bfs_origin_node_uuids AS origin_uuid
|
|
447
|
+
MATCH (origin:Entity|Episodic {uuid: origin_uuid})-[:RELATES_TO|MENTIONS]->{1,3}(n:Entity)
|
|
448
|
+
WHERE n.group_id = origin.group_id
|
|
449
|
+
"""
|
|
448
450
|
+ filter_query
|
|
449
451
|
+ ENTITY_NODE_RETURN
|
|
450
452
|
+ """
|
|
@@ -472,7 +474,7 @@ async def episode_fulltext_search(
|
|
|
472
474
|
limit=RELEVANT_SCHEMA_LIMIT,
|
|
473
475
|
) -> list[EpisodicNode]:
|
|
474
476
|
# BM25 search to get top episodes
|
|
475
|
-
fuzzy_query = fulltext_query(query, group_ids)
|
|
477
|
+
fuzzy_query = fulltext_query(query, group_ids, driver.fulltext_syntax)
|
|
476
478
|
if fuzzy_query == '':
|
|
477
479
|
return []
|
|
478
480
|
|
|
@@ -516,7 +518,7 @@ async def community_fulltext_search(
|
|
|
516
518
|
limit=RELEVANT_SCHEMA_LIMIT,
|
|
517
519
|
) -> list[CommunityNode]:
|
|
518
520
|
# BM25 search to get top communities
|
|
519
|
-
fuzzy_query = fulltext_query(query, group_ids)
|
|
521
|
+
fuzzy_query = fulltext_query(query, group_ids, driver.fulltext_syntax)
|
|
520
522
|
if fuzzy_query == '':
|
|
521
523
|
return []
|
|
522
524
|
|
|
@@ -740,7 +742,7 @@ async def get_relevant_nodes(
|
|
|
740
742
|
'uuid': node.uuid,
|
|
741
743
|
'name': node.name,
|
|
742
744
|
'name_embedding': node.name_embedding,
|
|
743
|
-
'fulltext_query': fulltext_query(node.name, [node.group_id]),
|
|
745
|
+
'fulltext_query': fulltext_query(node.name, [node.group_id], driver.fulltext_syntax),
|
|
744
746
|
}
|
|
745
747
|
for node in nodes
|
|
746
748
|
]
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "graphiti-core"
|
|
3
3
|
description = "A temporal graph building library"
|
|
4
|
-
version = "0.17.
|
|
4
|
+
version = "0.17.8"
|
|
5
5
|
authors = [
|
|
6
6
|
{ "name" = "Paul Paliychuk", "email" = "paul@getzep.com" },
|
|
7
7
|
{ "name" = "Preston Rasmussen", "email" = "preston@getzep.com" },
|
|
@@ -207,6 +207,38 @@
|
|
|
207
207
|
"created_at": "2025-07-13T08:54:26Z",
|
|
208
208
|
"repoId": 840056306,
|
|
209
209
|
"pullRequestNo": 711
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
"name": "soraxas",
|
|
213
|
+
"id": 22362177,
|
|
214
|
+
"comment_id": 3084093750,
|
|
215
|
+
"created_at": "2025-07-17T13:33:25Z",
|
|
216
|
+
"repoId": 840056306,
|
|
217
|
+
"pullRequestNo": 741
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
"name": "sdht0",
|
|
221
|
+
"id": 867424,
|
|
222
|
+
"comment_id": 3092540466,
|
|
223
|
+
"created_at": "2025-07-19T19:52:21Z",
|
|
224
|
+
"repoId": 840056306,
|
|
225
|
+
"pullRequestNo": 748
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
"name": "Naseem77",
|
|
229
|
+
"id": 34807727,
|
|
230
|
+
"comment_id": 3093746709,
|
|
231
|
+
"created_at": "2025-07-20T07:07:33Z",
|
|
232
|
+
"repoId": 840056306,
|
|
233
|
+
"pullRequestNo": 742
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
"name": "kavenGw",
|
|
237
|
+
"id": 3193355,
|
|
238
|
+
"comment_id": 3100620568,
|
|
239
|
+
"created_at": "2025-07-22T02:58:50Z",
|
|
240
|
+
"repoId": 840056306,
|
|
241
|
+
"pullRequestNo": 750
|
|
210
242
|
}
|
|
211
243
|
]
|
|
212
244
|
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/cross_encoder/bge_reranker_client.py
RENAMED
|
File without changes
|
|
File without changes
|
{graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/cross_encoder/gemini_reranker_client.py
RENAMED
|
File without changes
|
{graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/cross_encoder/openai_reranker_client.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/llm_client/azure_openai_client.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/llm_client/openai_base_client.py
RENAMED
|
File without changes
|
|
File without changes
|
{graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/llm_client/openai_generic_client.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/utils/maintenance/edge_operations.py
RENAMED
|
File without changes
|
|
File without changes
|
{graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/utils/maintenance/node_operations.py
RENAMED
|
File without changes
|
{graphiti_core-0.17.6 → graphiti_core-0.17.8}/graphiti_core/utils/maintenance/temporal_operations.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{graphiti_core-0.17.6 → graphiti_core-0.17.8}/tests/cross_encoder/test_bge_reranker_client.py
RENAMED
|
File without changes
|
{graphiti_core-0.17.6 → graphiti_core-0.17.8}/tests/cross_encoder/test_gemini_reranker_client.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{graphiti_core-0.17.6 → graphiti_core-0.17.8}/tests/utils/maintenance/test_edge_operations.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|