graphiti/server/README.md
Daniel Chalef 56694a6dea
Add automated FastAPI server container release workflow (#1031)
* conductor-checkpoint-start

* conductor-checkpoint-msg_01VhH9TifDw4FVprrPE6tss4

* conductor-checkpoint-msg_018cUkkzZNp3RFrut99UPoAJ

* conductor-checkpoint-msg_01S8GCTw5bowCWq4G2jATJ5s

* conductor-checkpoint-msg_01NoAtvCjfekKvenbTgGZtzt

* Fix critical issues in server container release workflow

Address all issues identified by code review:

1. **Dockerfile now installs from PyPI** - Changed from building local source to installing graphiti-core from PyPI, ensuring container matches published package
2. **Fixed version extraction** - Handle workflow_run context where tags aren't available, with pyproject.toml fallback
3. **Added BUILD_DATE and VCS_REF** - Pass all required build arguments to populate OCI labels
4. **Improved pre-release detection** - Enhanced regex to catch all Python patterns (a1, b2, dev0, etc.)
5. **Fixed checkout configuration** - Added fetch-depth: 0 and proper ref for workflow_run trigger

The container now truly uses the PyPI package, making the PyPI availability check meaningful.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* conductor-checkpoint-msg_01AuTTSKLm6XPqV4C5C2GL28

* Fix dependency installation order and optimize FalkorDB install

Address additional review concerns:

1. **Fix dependency installation order** - Install server deps first with uv sync, then upgrade graphiti-core to desired PyPI version using --upgrade flag. This prevents stale uv.lock (pinned to 0.13.2) from downgrading our target version.

2. **Optimize FalkorDB installation** - Combine graphiti-core installation with FalkorDB extra in single command, avoiding redundant package reinstall.

3. **Add --upgrade flag** - Ensures the specific PyPI version takes precedence over lockfile version.

The installation sequence is now:
- uv sync (server deps + graphiti-core 0.13.2 from lock)
- uv pip install --upgrade graphiti-core==TARGET_VERSION (upgrades to desired version)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-10-29 19:24:12 -07:00

2.4 KiB

graph-service

Graph service is a fast api server implementing the graphiti package.

Container Releases

The FastAPI server container is automatically built and published to Docker Hub when a new graphiti-core version is released to PyPI.

Image: zepai/graphiti

Available tags:

  • latest - Latest stable release
  • 0.22.1 - Specific version (matches graphiti-core version)

Platforms: linux/amd64, linux/arm64

The automated release workflow:

  1. Triggers when graphiti-core PyPI release completes
  2. Waits for PyPI package availability
  3. Builds multi-platform Docker image
  4. Tags with version number and latest
  5. Pushes to Docker Hub

Only stable releases are built automatically (pre-release versions are skipped).

Running Instructions

  1. Ensure you have Docker and Docker Compose installed on your system.

  2. Add zepai/graphiti:latest to your service setup

  3. Make sure to pass the following environment variables to the service

    OPENAI_API_KEY=your_openai_api_key
    NEO4J_USER=your_neo4j_user
    NEO4J_PASSWORD=your_neo4j_password
    NEO4J_PORT=your_neo4j_port
    
  4. This service depends on having access to a neo4j instance, you may wish to add a neo4j image to your service setup as well. Or you may wish to use neo4j cloud or a desktop version if running this locally.

    An example of docker compose setup may look like this:

       version: '3.8'
    
       services:
       graph:
          image: zepai/graphiti:latest
          ports:
             - "8000:8000"
    
          environment:
             - OPENAI_API_KEY=${OPENAI_API_KEY}
             - NEO4J_URI=bolt://neo4j:${NEO4J_PORT}
             - NEO4J_USER=${NEO4J_USER}
             - NEO4J_PASSWORD=${NEO4J_PASSWORD}
       neo4j:
          image: neo4j:5.22.0
    
          ports:
             - "7474:7474"  # HTTP
             - "${NEO4J_PORT}:${NEO4J_PORT}"  # Bolt
          volumes:
             - neo4j_data:/data
          environment:
             - NEO4J_AUTH=${NEO4J_USER}/${NEO4J_PASSWORD}
    
       volumes:
       neo4j_data:
    
  5. Once you start the service, it will be available at http://localhost:8000 (or the port you have specified in the docker compose file).

  6. You may access the swagger docs at http://localhost:8000/docs. You may also access redocs at http://localhost:8000/redoc.

  7. You may also access the neo4j browser at http://localhost:7474 (the port depends on the neo4j instance you are using).