Merge branch 'getzep:main' into main
This commit is contained in:
commit
a0693dd0bf
8 changed files with 278 additions and 4 deletions
54
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
54
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
|
|
@ -0,0 +1,54 @@
|
||||||
|
---
|
||||||
|
name: Bug Report
|
||||||
|
about: Create a report to help us improve Graphiti
|
||||||
|
title: '[BUG] '
|
||||||
|
labels: bug
|
||||||
|
assignees: ''
|
||||||
|
---
|
||||||
|
|
||||||
|
## Bug Description
|
||||||
|
A clear and concise description of what the bug is.
|
||||||
|
|
||||||
|
## Steps to Reproduce
|
||||||
|
Provide a minimal code example that reproduces the issue:
|
||||||
|
|
||||||
|
```python
|
||||||
|
# Your code here
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expected Behavior
|
||||||
|
A clear and concise description of what you expected to happen.
|
||||||
|
|
||||||
|
## Actual Behavior
|
||||||
|
A clear and concise description of what actually happened.
|
||||||
|
|
||||||
|
## Environment
|
||||||
|
- **Graphiti Version**: [e.g. 0.15.1]
|
||||||
|
- **Python Version**: [e.g. 3.11.5]
|
||||||
|
- **Operating System**: [e.g. macOS 14.0, Ubuntu 22.04]
|
||||||
|
- **Database Backend**: [e.g. Neo4j 5.26, FalkorDB 1.1.2]
|
||||||
|
- **LLM Provider & Model**: [e.g. OpenAI gpt-4.1, Anthropic claude-4-sonnet, Google gemini-2.5-flash]
|
||||||
|
|
||||||
|
## Installation Method
|
||||||
|
- [ ] pip install
|
||||||
|
- [ ] uv add
|
||||||
|
- [ ] Development installation (git clone)
|
||||||
|
|
||||||
|
## Error Messages/Traceback
|
||||||
|
```
|
||||||
|
Paste the full error message and traceback here
|
||||||
|
```
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
```python
|
||||||
|
# Relevant configuration or initialization code
|
||||||
|
```
|
||||||
|
|
||||||
|
## Additional Context
|
||||||
|
- Does this happen consistently or intermittently?
|
||||||
|
- Which component are you using? (core library, REST server, MCP server)
|
||||||
|
- Any recent changes to your environment?
|
||||||
|
- Related issues or similar problems you've encountered?
|
||||||
|
|
||||||
|
## Possible Solution
|
||||||
|
If you have ideas about what might be causing the issue or how to fix it, please share them here.
|
||||||
32
.github/pull_request_template.md
vendored
Normal file
32
.github/pull_request_template.md
vendored
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
## Summary
|
||||||
|
Brief description of the changes in this PR.
|
||||||
|
|
||||||
|
## Type of Change
|
||||||
|
- [ ] Bug fix
|
||||||
|
- [ ] New feature
|
||||||
|
- [ ] Performance improvement
|
||||||
|
- [ ] Documentation/Tests
|
||||||
|
|
||||||
|
## Objective
|
||||||
|
**For new features and performance improvements:** Clearly describe the objective and rationale for this change.
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
- [ ] Unit tests added/updated
|
||||||
|
- [ ] Integration tests added/updated
|
||||||
|
- [ ] All existing tests pass
|
||||||
|
|
||||||
|
## Breaking Changes
|
||||||
|
- [ ] This PR contains breaking changes
|
||||||
|
|
||||||
|
If this is a breaking change, describe:
|
||||||
|
- What functionality is affected
|
||||||
|
- Migration path for existing users
|
||||||
|
|
||||||
|
## Checklist
|
||||||
|
- [ ] Code follows project style guidelines (`make lint` passes)
|
||||||
|
- [ ] Self-review completed
|
||||||
|
- [ ] Documentation updated where necessary
|
||||||
|
- [ ] No secrets or sensitive information committed
|
||||||
|
|
||||||
|
## Related Issues
|
||||||
|
Closes #[issue number]
|
||||||
2
.github/workflows/cla.yml
vendored
2
.github/workflows/cla.yml
vendored
|
|
@ -28,7 +28,7 @@ jobs:
|
||||||
path-to-document: "https://github.com/getzep/graphiti/blob/main/Zep-CLA.md" # e.g. a CLA or a DCO document
|
path-to-document: "https://github.com/getzep/graphiti/blob/main/Zep-CLA.md" # e.g. a CLA or a DCO document
|
||||||
# branch should not be protected unless a personal PAT is used
|
# branch should not be protected unless a personal PAT is used
|
||||||
branch: "main"
|
branch: "main"
|
||||||
allowlist: paul-paliychuk,prasmussen15,danielchalef,dependabot[bot],ellipsis-dev
|
allowlist: paul-paliychuk,prasmussen15,danielchalef,dependabot[bot],ellipsis-dev,Claude[bot]
|
||||||
|
|
||||||
# the followings are the optional inputs - If the optional inputs are not given, then default values will be taken
|
# the followings are the optional inputs - If the optional inputs are not given, then default values will be taken
|
||||||
#remote-organization-name: enter the remote organization name where the signatures should be stored (Default is storing the signatures in the same repository)
|
#remote-organization-name: enter the remote organization name where the signatures should be stored (Default is storing the signatures in the same repository)
|
||||||
|
|
|
||||||
78
.github/workflows/claude-code-review.yml
vendored
Normal file
78
.github/workflows/claude-code-review.yml
vendored
Normal file
|
|
@ -0,0 +1,78 @@
|
||||||
|
name: Claude Code Review
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
types: [opened, synchronize]
|
||||||
|
# Optional: Only run on specific file changes
|
||||||
|
# paths:
|
||||||
|
# - "src/**/*.ts"
|
||||||
|
# - "src/**/*.tsx"
|
||||||
|
# - "src/**/*.js"
|
||||||
|
# - "src/**/*.jsx"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
claude-review:
|
||||||
|
# Optional: Filter by PR author
|
||||||
|
# if: |
|
||||||
|
# github.event.pull_request.user.login == 'external-contributor' ||
|
||||||
|
# github.event.pull_request.user.login == 'new-developer' ||
|
||||||
|
# github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR'
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
pull-requests: write
|
||||||
|
issues: read
|
||||||
|
id-token: write
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 1
|
||||||
|
|
||||||
|
- name: Run Claude Code Review
|
||||||
|
id: claude-review
|
||||||
|
uses: anthropics/claude-code-action@beta
|
||||||
|
with:
|
||||||
|
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
|
||||||
|
|
||||||
|
# Optional: Specify model (defaults to Claude Sonnet 4, uncomment for Claude Opus 4)
|
||||||
|
# model: "claude-opus-4-20250514"
|
||||||
|
|
||||||
|
# Direct prompt for automated review (no @claude mention needed)
|
||||||
|
direct_prompt: |
|
||||||
|
Please review this pull request and provide feedback on:
|
||||||
|
- Code quality and best practices
|
||||||
|
- Potential bugs or issues
|
||||||
|
- Performance considerations
|
||||||
|
- Security concerns
|
||||||
|
- Test coverage
|
||||||
|
|
||||||
|
Be constructive and helpful in your feedback.
|
||||||
|
|
||||||
|
# Optional: Use sticky comments to make Claude reuse the same comment on subsequent pushes to the same PR
|
||||||
|
# use_sticky_comment: true
|
||||||
|
|
||||||
|
# Optional: Customize review based on file types
|
||||||
|
# direct_prompt: |
|
||||||
|
# Review this PR focusing on:
|
||||||
|
# - For TypeScript files: Type safety and proper interface usage
|
||||||
|
# - For API endpoints: Security, input validation, and error handling
|
||||||
|
# - For React components: Performance, accessibility, and best practices
|
||||||
|
# - For tests: Coverage, edge cases, and test quality
|
||||||
|
|
||||||
|
# Optional: Different prompts for different authors
|
||||||
|
# direct_prompt: |
|
||||||
|
# ${{ github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR' &&
|
||||||
|
# 'Welcome! Please review this PR from a first-time contributor. Be encouraging and provide detailed explanations for any suggestions.' ||
|
||||||
|
# 'Please provide a thorough code review focusing on our coding standards and best practices.' }}
|
||||||
|
|
||||||
|
# Optional: Add specific tools for running tests or linting
|
||||||
|
# allowed_tools: "Bash(npm run test),Bash(npm run lint),Bash(npm run typecheck)"
|
||||||
|
|
||||||
|
# Optional: Skip review for certain conditions
|
||||||
|
# if: |
|
||||||
|
# !contains(github.event.pull_request.title, '[skip-review]') &&
|
||||||
|
# !contains(github.event.pull_request.title, '[WIP]')
|
||||||
|
|
||||||
64
.github/workflows/claude.yml
vendored
Normal file
64
.github/workflows/claude.yml
vendored
Normal file
|
|
@ -0,0 +1,64 @@
|
||||||
|
name: Claude Code
|
||||||
|
|
||||||
|
on:
|
||||||
|
issue_comment:
|
||||||
|
types: [created]
|
||||||
|
pull_request_review_comment:
|
||||||
|
types: [created]
|
||||||
|
issues:
|
||||||
|
types: [opened, assigned]
|
||||||
|
pull_request_review:
|
||||||
|
types: [submitted]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
claude:
|
||||||
|
if: |
|
||||||
|
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
|
||||||
|
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
|
||||||
|
(github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
|
||||||
|
(github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
pull-requests: write
|
||||||
|
issues: write
|
||||||
|
id-token: write
|
||||||
|
actions: read # Required for Claude to read CI results on PRs
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 1
|
||||||
|
|
||||||
|
- name: Run Claude Code
|
||||||
|
id: claude
|
||||||
|
uses: anthropics/claude-code-action@beta
|
||||||
|
with:
|
||||||
|
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
|
||||||
|
|
||||||
|
# This is an optional setting that allows Claude to read CI results on PRs
|
||||||
|
additional_permissions: |
|
||||||
|
actions: read
|
||||||
|
|
||||||
|
# Optional: Specify model (defaults to Claude Sonnet 4, uncomment for Claude Opus 4)
|
||||||
|
# model: "claude-opus-4-20250514"
|
||||||
|
|
||||||
|
# Optional: Customize the trigger phrase (default: @claude)
|
||||||
|
# trigger_phrase: "/claude"
|
||||||
|
|
||||||
|
# Optional: Trigger when specific user is assigned to an issue
|
||||||
|
# assignee_trigger: "claude-bot"
|
||||||
|
|
||||||
|
# Optional: Allow Claude to run specific commands
|
||||||
|
# allowed_tools: "Bash(npm install),Bash(npm run build),Bash(npm run test:*),Bash(npm run lint:*)"
|
||||||
|
|
||||||
|
# Optional: Add custom instructions for Claude to customize its behavior for your project
|
||||||
|
# custom_instructions: |
|
||||||
|
# Follow our coding standards
|
||||||
|
# Ensure all new code has tests
|
||||||
|
# Use TypeScript for new files
|
||||||
|
|
||||||
|
# Optional: Custom environment variables for Claude
|
||||||
|
# claude_env: |
|
||||||
|
# NODE_ENV: test
|
||||||
|
|
||||||
|
|
@ -24,7 +24,7 @@ uv sync --extra dev
|
||||||
# Format code (ruff import sorting + formatting)
|
# Format code (ruff import sorting + formatting)
|
||||||
make format
|
make format
|
||||||
|
|
||||||
# Lint code (ruff + mypy type checking)
|
# Lint code (ruff + pyright type checking)
|
||||||
make lint
|
make lint
|
||||||
|
|
||||||
# Run tests
|
# Run tests
|
||||||
|
|
@ -111,7 +111,8 @@ docker-compose up
|
||||||
- Use Ruff for formatting and linting (configured in pyproject.toml)
|
- Use Ruff for formatting and linting (configured in pyproject.toml)
|
||||||
- Line length: 100 characters
|
- Line length: 100 characters
|
||||||
- Quote style: single quotes
|
- Quote style: single quotes
|
||||||
- Type checking with MyPy is enforced
|
- Type checking with Pyright is enforced
|
||||||
|
- Main project uses `typeCheckingMode = "basic"`, server uses `typeCheckingMode = "standard"`
|
||||||
|
|
||||||
### Testing Requirements
|
### Testing Requirements
|
||||||
|
|
||||||
|
|
@ -130,4 +131,4 @@ When working with the MCP server, follow the patterns established in `mcp_server
|
||||||
- Always search for existing knowledge before adding new information
|
- Always search for existing knowledge before adding new information
|
||||||
- Use specific entity type filters (`Preference`, `Procedure`, `Requirement`)
|
- Use specific entity type filters (`Preference`, `Procedure`, `Requirement`)
|
||||||
- Store new information immediately using `add_memory`
|
- Store new information immediately using `add_memory`
|
||||||
- Follow discovered procedures and respect established preferences
|
- Follow discovered procedures and respect established preferences
|
||||||
22
README.md
22
README.md
|
|
@ -213,6 +213,28 @@ In addition to the Neo4j and OpenAi-compatible credentials, Graphiti also has a
|
||||||
If you are using one of our supported models, such as Anthropic or Voyage models, the necessary environment variables
|
If you are using one of our supported models, such as Anthropic or Voyage models, the necessary environment variables
|
||||||
must be set.
|
must be set.
|
||||||
|
|
||||||
|
### Database Configuration
|
||||||
|
|
||||||
|
`DEFAULT_DATABASE` specifies the database name to use for graph operations. This is particularly important for Neo4j 5+ users:
|
||||||
|
|
||||||
|
- **Neo4j 5+**: The default database name is `neo4j` (not `default_db`)
|
||||||
|
- **Neo4j 4**: The default database name is `default_db`
|
||||||
|
- **FalkorDB**: The default graph name is `default_db`
|
||||||
|
|
||||||
|
If you encounter the error `Graph not found: default_db` when using Neo4j 5, set:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
export DEFAULT_DATABASE=neo4j
|
||||||
|
```
|
||||||
|
|
||||||
|
Or add to your `.env` file:
|
||||||
|
|
||||||
|
```
|
||||||
|
DEFAULT_DATABASE=neo4j
|
||||||
|
```
|
||||||
|
|
||||||
|
### Performance Configuration
|
||||||
|
|
||||||
`USE_PARALLEL_RUNTIME` is an optional boolean variable that can be set to true if you wish
|
`USE_PARALLEL_RUNTIME` is an optional boolean variable that can be set to true if you wish
|
||||||
to enable Neo4j's parallel runtime feature for several of our search queries.
|
to enable Neo4j's parallel runtime feature for several of our search queries.
|
||||||
Note that this feature is not supported for Neo4j Community edition or for smaller AuraDB instances,
|
Note that this feature is not supported for Neo4j Community edition or for smaller AuraDB instances,
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,9 @@ export NEO4J_PASSWORD=password
|
||||||
|
|
||||||
# Optional FalkorDB connection parameters (defaults shown)
|
# Optional FalkorDB connection parameters (defaults shown)
|
||||||
export FALKORDB_URI=falkor://localhost:6379
|
export FALKORDB_URI=falkor://localhost:6379
|
||||||
|
|
||||||
|
# Database configuration (required for Neo4j 5+)
|
||||||
|
export DEFAULT_DATABASE=neo4j
|
||||||
```
|
```
|
||||||
|
|
||||||
3. Run the example:
|
3. Run the example:
|
||||||
|
|
@ -71,6 +74,26 @@ After running this example, you can:
|
||||||
4. Try other predefined search recipes from `graphiti_core.search.search_config_recipes`
|
4. Try other predefined search recipes from `graphiti_core.search.search_config_recipes`
|
||||||
5. Explore the more advanced examples in the other directories
|
5. Explore the more advanced examples in the other directories
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### "Graph not found: default_db" Error
|
||||||
|
|
||||||
|
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`.
|
||||||
|
|
||||||
|
**Solution:**
|
||||||
|
Set the `DEFAULT_DATABASE` environment variable to `neo4j`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
export DEFAULT_DATABASE=neo4j
|
||||||
|
```
|
||||||
|
|
||||||
|
Or add it to your `.env` file:
|
||||||
|
```
|
||||||
|
DEFAULT_DATABASE=neo4j
|
||||||
|
```
|
||||||
|
|
||||||
|
This tells Graphiti to use the correct database name for your Neo4j version.
|
||||||
|
|
||||||
## Understanding the Output
|
## Understanding the Output
|
||||||
|
|
||||||
### Edge Search Results
|
### Edge Search Results
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue