Commit graph

225 commits

Author SHA1 Message Date
prestonrasmussen
f4dc7e2fba update max query length 2025-07-21 19:39:31 -04:00
Gal Shubeli
35e0692328
[Bug Fix] Fix the Group ID usage with FalkorDB (#733)
* groupid-none

* groupid-def-fulltext

* lint

* Update graphiti_core/helpers.py

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

---------

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-07-17 12:35:08 -04:00
Preston Rasmussen
0ac2541b35
make egg_operations more robust (#737)
update
2025-07-16 17:12:20 -04:00
Preston Rasmussen
748464dfa5
Return embeddings option in get_by_uuids (#736)
* add with_embeddings option

* update
2025-07-16 11:09:10 -04:00
Preston Rasmussen
5d45d71259
Bulk updates (#732)
* updates

* update

* update

* typo

* linter
2025-07-16 02:26:33 -04:00
Preston Rasmussen
62df6624d4
bulk utils update (#727)
* bulk utils update

* remove unused imports

* edge model type guard
2025-07-15 11:42:08 -04:00
Preston Rasmussen
e56ba1a71c
save edge update (#721) 2025-07-14 11:15:38 -04:00
Daniel Chalef
4481702c9f
feat: enhance GeminiClient with max tokens management (#712)
* feat: enhance GeminiClient with max tokens management

- Introduced a mapping for maximum output tokens for various Gemini models.
- Added methods to resolve max tokens based on precedence rules, allowing for more flexible token management.
- Updated tests to verify max tokens behavior, ensuring explicit parameters take precedence and fallback mechanisms work correctly.

This change improves the handling of token limits for different models, enhancing the client’s configurability and usability.

* refactor: streamline max tokens retrieval in GeminiClient

- Removed the fallback to DEFAULT_MAX_TOKENS in favor of directly using model-specific maximum tokens.
- Simplified the logic for determining max tokens, enhancing code clarity and maintainability.

This change improves the efficiency of token management within the GeminiClient.
2025-07-13 14:37:55 -07:00
alan blount
e16740be9d
feat(gemini): embedding batch size & lite default (#680)
* feat(gemini): embedding batch size & lite default

The new `gemini-embedding-001` model only allows one embedding input per batch
(instance), but has other impressive statistics:
https://cloud.google.com/vertex-ai/generative-ai/docs/model-reference/text-embeddings-api

The -DEFAULT_SMALL_MODEL must not have the 'models/' prefix.

* Refactor: Improve Gemini Client Error Handling and Reliability

This commit introduces several improvements to the Gemini client to enhance its robustness and reliability.

- Implemented more specific error handling for various Gemini API responses, including rate limits and safety blocks.
- Added a JSON salvaging mechanism to gracefully handle incomplete or malformed JSON responses from the API.
- Introduced detailed logging for failed LLM generations to simplify debugging and troubleshooting.
- Refined the Gemini embedder to better handle empty or invalid embedding responses.
- Updated and corrected tests to align with the improved error handling and reliability features.

* fix: cleanup in _log_failed_generation()

* fix: cleanup in _log_failed_generation()

* Fix ruff B904 error in gemini_client.py

* fix(gemini): correct retry logic and enhance error logging

Updated the retry mechanism in the GeminiClient to ensure it retries the maximum number of times specified. Improved error logging to provide clearer insights when all retries are exhausted, including detailed information about the last error encountered.

* fix(gemini): enhance error handling for safety blocks and update tests

Refined error handling in the GeminiClient to improve detection of safety block conditions. Updated test cases to reflect changes in exception messages and ensure proper retry logic is enforced. Enhanced mock responses in tests to better simulate real-world scenarios, including handling of invalid JSON responses.

* revert default gemini to text-embedding-001

---------

Co-authored-by: Daniel Chalef <131175+danielchalef@users.noreply.github.com>
2025-07-13 10:20:22 -07:00
Preston Rasmussen
deda803dc5
update search filters (#706)
* update search filters

* toml
2025-07-11 10:53:15 -04:00
Daniel Chalef
aa6e38856a
[REFACTOR][FIX] Move away from DEFAULT_DATABASE environment variable in favour of driver-config support (dc) (#699)
* fix: remove global DEFAULT_DATABASE usage in favor of driver-specific
config

Fixes bugs introduced in PR #607. This removes reliance on the global
DEFAULT_DATABASE environment variable. It specifies the database within
each driver. PR #607 introduced a Neo4j compatability, as the database
names are different when attempting to support FalkorDB.

This refactor improves compatability across database types and ensures
future reliance by isolating the configuraiton to the driver level.

* fix: make falkordb support optional

This ensures that the the optional dependency and subsequent import is compliant with the graphiti-core project dependencies.

* chore: fmt code

* chore: undo changes to uv.lock

* fix: undo potentially breaking changes to drive interface

* fix: ensure a default database of "None" is provided - falling back to internal default

* chore: ensure default value exists for session and delete_all_indexes

* chore: fix typos and grammar

* chore: update package versions and dependencies in uv.lock and bulk_utils.py

* docs: update database configuration instructions for Neo4j and FalkorDB

Clarified default database names and how to override them in driver constructors. Updated testing requirements to include specific commands for running integration and unit tests.

* fix: ensure params defaults to an empty dictionary in Neo4jDriver

Updated the execute_query method to initialize params as an empty dictionary if not provided, ensuring compatibility with the database configuration.

---------

Co-authored-by: Urmzd <urmzd@dal.ca>
2025-07-10 17:25:39 -04:00
Preston Rasmussen
0675ac2b7d
Bulk ingestion (#698)
* partial

* update

* update

* update

* update

* updates

* updates

* update

* update
2025-07-10 12:14:49 -04:00
alan blount
432ff7577d
feat(gemini): simplify config for Gemini clients (#679)
The cross_encoder for Gemini already supported passing in a custom client.

I replicated the same input pattern to embedder and llm_client.

The value is, you can support custom API endpoints and other options like below:

        cross_encoder=GeminiRerankerClient(
            client=genai.Client(
                api_key=os.environ.get('GOOGLE_GENAI_API_KEY'),
                http_options=types.HttpOptions(api_version='v1alpha')),
            config=LLMConfig(
                model="gemini-2.5-flash-lite-preview-06-17"
            )
        ))
2025-07-05 21:14:55 -07:00
Daniel Chalef
513cfbf7b2
Refactor imports (#675)
* Refactor imports

* Fix: Remove duplicate sentence-transformers dependency from dev requirements

* Refactor: Update optional import patterns across various modules for better type checking and error handling

* Update CONTRIBUTING.md

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

---------

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-07-05 08:57:07 -07:00
Daniel Chalef
d1e150f7d7
feat: support OpenAIClient in OpenAIRerankerClient (#676)
fix typing
2025-07-04 17:37:41 -07:00
James.
7ce07942b1
Fix: Add missing name_embedding field to community search queries (#664)
Enhanced queries in search_utils.py to include 'name_embedding' field in community full-text and similarity search functions.
2025-07-02 11:45:25 -04:00
Preston Rasmussen
71360d91fc
reformat (#655) 2025-07-01 12:26:15 -04:00
Daniel Chalef
689d669559
Gemini client improvements; Gemini reranker (#645)
* add support for Gemini 2.5 model thinking budget

* allow adding thinking config to support current and future gemini models

* merge

* improve client; add reranker

* refactor: change type hint for gemini_messages to Any for flexibility

* refactor: update GeminiRerankerClient to use direct relevance scoring and improve ranking logic. Add tests

* fix fixtures

---------

Co-authored-by: realugbun <github.disorder751@passmail.net>
2025-06-30 12:55:17 -07:00
Daniel Chalef
daec70db65
fix falkordb linting issues (#650)
Refactor FalkorDB driver: change port type to int and clean up whitespace
2025-06-30 12:55:05 -07:00
Daniel Chalef
8213d10d44
migrate to pyright (#646)
* migrate to pyright

* Refactor type checking to use Pyright, update dependencies, and clean up code.

- Replaced MyPy with Pyright in configuration files and CI workflows.
- Updated `pyproject.toml` and `uv.lock` to reflect new dependencies and versions.
- Adjusted type hints and fixed minor code issues across various modules for better compatibility with Pyright.
- Added new packages `backoff` and `posthog` to the project dependencies.

* Update CI workflows to install all extra dependencies for type checking and unit tests

* Update dependencies in uv.lock to replace MyPy with Pyright and add nodeenv package. Adjust type hinting in config.py for compatibility with Pyright.
2025-06-30 12:04:21 -07:00
Gal Shubeli
6e6115c134
FalkorDB Integration: Bug Fixes and Unit Tests (#607)
* fixes-and-tests

* update-workflow

* lint-fixes

* mypy-fixes

* fix-falkor-tests

* Update poetry.lock after pyproject.toml changes

* update-yml

* fix-tests

* comp-tests

* typo

* fix-tests

---------

Co-authored-by: Guy Korland <gkorland@gmail.com>
2025-06-30 11:01:44 -04:00
Daniel Chalef
7537f0c972
fix: correct spacing in group IDs filter concatenation in fulltext_query function (#636) 2025-06-27 14:09:01 -07:00
Daniel Chalef
cb4e187aed
feat: add telemetry with PostHog and update Docker configurations (#633)
* Implement telemetry feature for anonymous usage statistics collection in Graphiti; update Dockerfile CMD format for better signal handling; adjust Neo4j URI and healthcheck in docker-compose.yml; add new dependencies in pyproject.toml and poetry.lock.

* remove duplicated properties

* Update Dockerfile CMD to use JSON array format for improved signal handling

* remove tommlib dep only in 3.11

* Delete server/graph_service/logging_config.py
2025-06-27 12:23:30 -07:00
Daniel Chalef
c29893d972
Excluded entity type filtering (#624)
* excluded entities filtering

* Fix variable name casing in test_entity_exclusion_int.py for consistency
2025-06-26 20:54:43 -07:00
prestonrasmussen
c6f7c98598 updates 2025-06-26 15:38:05 -04:00
Preston Rasmussen
97593550a9
fix fulltext query (#626)
* fix fulltext query

* updates
2025-06-25 18:09:56 -04:00
Daniel Chalef
9cc2e86071
Azure OpenAI improvements and fixes; Improve Graphiti Azure OpenAI config (#620)
* Azure OpenAI improvements and fixes; Improve Graphiti Azure OpenAI config

* format
2025-06-25 14:48:12 -04:00
Preston Rasmussen
2b27353097
Node name bug fix (#622)
* fixes

* fix bugs

* change version
2025-06-24 17:13:27 -04:00
Daniel Chalef
a6bb9b3eca
Add group ID validation and error handling (#618)
- Introduced `GroupIdValidationError` to handle invalid group ID formats.
- Added `validate_group_id` function to check that group IDs contain only alphanumeric characters, dashes, or underscores.
- Integrated `validate_group_id` checks in the `Graphiti` class to ensure group IDs are validated during processing.
2025-06-24 09:33:54 -07:00
Daniel Chalef
fe870b953f
Add max_coroutines parameter to Graphiti and update semaphore_gather function (#619)
- Introduced max_coroutines parameter in the Graphiti class to control the maximum number of concurrent operations.
- Updated the semaphore_gather function to accept max_coroutines as an optional argument, defaulting to SEMAPHORE_LIMIT if not provided.
- Adjusted multiple calls to semaphore_gather throughout the Graphiti class to utilize the new max_coroutines parameter for better concurrency management.
2025-06-24 09:32:16 -07:00
Preston Rasmussen
760ca7e90c
Node name bug (#605)
* prompt update

* prompt update

* revert quickstart changes
2025-06-18 18:20:28 -04:00
Preston Rasmussen
2b0bc21b21
be more explicit about edge type signatures (#600)
* be more explicit about edge type signatures

* bump version

* update
2025-06-18 16:01:00 -04:00
Preston Rasmussen
e8bf81fc6b
add IS_DUPLICATE_OF edges (#599)
* add IS_DUPLICATE_OF edges

* cypher query update

* robust handling
2025-06-17 11:56:55 -04:00
Preston Rasmussen
fb6d674fc2
update falkordb (#589)
* update falkordb

* updates

* updates
2025-06-16 12:02:08 -04:00
Preston Rasmussen
19fde653a6
update driver (#583)
* update driver

* mypy updates

* mypy updates

* mypy updates

* Update graphiti_core/graph_queries.py

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

* mypy updates

* mypy

* mypy updates

* mypy updates

* mypy updates

* mypy updates

---------

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-06-13 14:12:09 -04:00
prestonrasmussen
12b90633a4 correct import of literal string 2025-06-13 12:15:33 -04:00
Preston Rasmussen
14146dc46f
Add support for falkordb (#575)
* [wip] add support for falkordb

* updates

* fix-async

* progress

* fix-issues

* rm-date-handler

* red-code

* rm-uns-try

* fix-exm

* rm-un-lines

* fix-comments

* fix-se-utils

* fix-falkor-readme

* fix-falkor-cosine-score

* update-falkor-ver

* fix-vec-sim

* min-updates

* make format

* update graph driver abstraction

* poetry lock

* updates

* linter

* Update graphiti_core/search/search_utils.py

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

---------

Co-authored-by: Dudi Zimberknopf <zimber.dudi@gmail.com>
Co-authored-by: Gal Shubeli <galshubeli93@gmail.com>
Co-authored-by: Gal Shubeli <124919062+galshubeli@users.noreply.github.com>
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-06-13 12:06:57 -04:00
Daniel Chalef
3d7e1a4b79
feat: add Azure client wrappers for embedding and LLM, integrate into server (#581)
* create wrappers for azure clients

* rremove unused crossencoder client

* format

* chore: update graphiti-core to 0.12.0rc5 and pydantic to 2.11.5

* Update graphiti_core/llm_client/azure_openai_client.py

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

---------

Co-authored-by: Preston Rasmussen <109292228+prasmussen15@users.noreply.github.com>
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-06-13 11:55:08 -04:00
PHẠM MINH LONG
ab3b8e0061
Fix OpenAI Reranker logic (#579) 2025-06-12 12:34:32 -04:00
Preston Rasmussen
ebee09b335
Edge extraction and Node Deduplication updates (#564)
* update tests

* updated fact extraction

* optimize node deduplication

* linting

* Update graphiti_core/utils/maintenance/edge_operations.py

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

---------

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-06-06 12:28:52 -04:00
TheEpTic
735b020624
BUG FIX: Fix trailing AND in edge_search_filter_query_constructor Cypher query (#541)
Fix trailing AND in edge_search_filter_query_constructor Cypher query

Corrected the edge_search_filter_query_constructor function to prevent
trailing AND operators in generated Cypher queries, which caused
Neo.ClientError.Statement.SyntaxError. Changed condition from
`j != len(and_filter_query) - 1` to `j != len(and_filters) - 1` for
valid_at, invalid_at, created_at, and expired_at filter blocks. Also
fixed outer loop condition to use `len(filters.<field>)` instead of
`len(or_list)`. Ensures valid Cypher syntax for single DateFilter cases.

Co-authored-by: TheEpTic <326774+TheEpTic@users.noreply.github.com>
2025-05-29 12:55:16 -04:00
Preston Rasmussen
1eea232ef1
remove sanitize (#540)
* remove sanitize

* format
2025-05-28 19:34:44 -04:00
Preston Rasmussen
a9a6ee6bf0
edge operations update (#539)
* edge operations update

* bump version

* edge name

* update
2025-05-28 16:33:20 -04:00
Preston Rasmussen
5fe2f588a6
Edge type search (#537)
* add filters

* search filter

* Update graphiti_core/search/search_utils.py

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

---------

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-05-27 13:16:28 -04:00
Pavlo Paliychuk
b295f57e78
fix: update key name in edge attributes context (#531) 2025-05-27 09:58:51 -04:00
Daniel Chalef
1b54b45144
Improve error handling in GeminiEmbedder by raising ValueError for empty embedding values. This change enhances robustness by ensuring that all returned embeddings contain valid data. (#515) 2025-05-21 20:32:18 -07:00
Daniel Chalef
9ab8abf9b4
MCP Fixes (#512)
* Refactor group_id handling and update dependencies

- Changed default behavior for `group_id` to 'default' instead of generating a UUID.
- Updated README to reflect the new default behavior for `--group-id`.
- Reformatted LLMConfig initialization for better readability.
- Bumped versions of several dependencies including `azure-core`, `azure-identity`, `certifi`, `charset-normalizer`, `sse-starlette`, and `typing-inspection`.
- Added `python-multipart` as a new dependency.

This update improves usability and ensures compatibility with the latest library versions.

* Update Graphiti MCP server instructions and refactor method names for clarity

- Revised the welcome message to enhance clarity about Graphiti's functionality.
- Renamed methods for better understanding: `add_episode` to `add_memory`, `search_nodes` to `search_memory_nodes`, `search_facts` to `search_memory_facts`, and updated related docstrings to reflect these changes.
- Updated references to "knowledge graph" to "graph memory" for consistency throughout the codebase.

* Update README for Graphiti MCP server configuration and integration with Claude Desktop

- Changed server name from "graphiti" to "graphiti-memory" in configuration examples for clarity.
- Added instructions for running the Graphiti MCP server using Docker.
- Included detailed steps for integrating Claude Desktop with the Graphiti MCP server, including optional installation of `mcp-remote`.
- Enhanced overall documentation to improve user experience and understanding of the setup process.

* Enhance error handling in GeminiEmbedder and GeminiClient

- Added checks to raise exceptions when no embeddings or response text are returned, improving robustness.
- Included type ignore comments for mypy compatibility in embed_content calls.

* Update graphiti_core/embedder/gemini.py

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

* Update graphiti_core/llm_client/gemini_client.py

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

---------

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-05-21 19:39:41 -07:00
Preston Rasmussen
db7595fe63
Edge types (#501)
* update entity edge attributes

* Adding prompts

* extract fact attributes

* edge types

* edge types no regressions

* mypy

* mypy update

* Update graphiti_core/prompts/dedupe_edges.py

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

* Update graphiti_core/prompts/dedupe_edges.py

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

* mypy

---------

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-05-19 13:30:56 -04:00
Preston Rasmussen
9422b6f5fb
Node dedupe efficiency (#490)
* update resolve extracted edge

* updated edge resolution

* dedupe nodes update

* single pass node resolution

* updates

* mypy updates

* Update graphiti_core/prompts/dedupe_nodes.py

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

* remove unused imports

* mypy

---------

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-05-15 13:56:33 -04:00
prestonrasmussen
f096c8770c remove unused import 2025-05-15 10:12:31 -04:00