diff --git a/Dockerfile b/Dockerfile index b07e53a00..89b44ecb9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -48,15 +48,15 @@ RUN --mount=type=cache,target=/root/.cache/uv \ uv sync --frozen --no-dev && \ if [ -n "$GRAPHITI_VERSION" ]; then \ if [ "$INSTALL_FALKORDB" = "true" ]; then \ - uv pip install --system --upgrade "graphiti-core[falkordb]==$GRAPHITI_VERSION"; \ + uv pip install --upgrade "graphiti-core[falkordb]==$GRAPHITI_VERSION"; \ else \ - uv pip install --system --upgrade "graphiti-core==$GRAPHITI_VERSION"; \ + uv pip install --upgrade "graphiti-core==$GRAPHITI_VERSION"; \ fi; \ else \ if [ "$INSTALL_FALKORDB" = "true" ]; then \ - uv pip install --system --upgrade "graphiti-core[falkordb]"; \ + uv pip install --upgrade "graphiti-core[falkordb]"; \ else \ - uv pip install --system --upgrade graphiti-core; \ + uv pip install --upgrade graphiti-core; \ fi; \ fi @@ -74,5 +74,5 @@ USER app ENV PORT=8000 EXPOSE $PORT -# Use uv run for execution -CMD ["uv", "run", "uvicorn", "graph_service.main:app", "--host", "0.0.0.0", "--port", "8000"] +# Use uv run with --no-sync to avoid re-syncing on startup +CMD ["uv", "run", "--no-sync", "uvicorn", "graph_service.main:app", "--host", "0.0.0.0", "--port", "8000"] diff --git a/server/graph_service/config.py b/server/graph_service/config.py index d3edb220d..b35ac3a84 100644 --- a/server/graph_service/config.py +++ b/server/graph_service/config.py @@ -11,9 +11,13 @@ class Settings(BaseSettings): openai_base_url: str | None = Field(None) model_name: str | None = Field(None) embedding_model_name: str | None = Field(None) - neo4j_uri: str - neo4j_user: str - neo4j_password: str + neo4j_uri: str | None = Field(None) + neo4j_user: str | None = Field(None) + neo4j_password: str | None = Field(None) + falkordb_host: str | None = Field(None) + falkordb_port: int | None = Field(None) + falkordb_database: str | None = Field(None) + db_backend: str = Field('neo4j') model_config = SettingsConfigDict(env_file='.env', extra='ignore') diff --git a/server/graph_service/zep_graphiti.py b/server/graph_service/zep_graphiti.py index 097c9f391..f561d73b7 100644 --- a/server/graph_service/zep_graphiti.py +++ b/server/graph_service/zep_graphiti.py @@ -15,8 +15,15 @@ class ZepGraphiti(Graphiti): - def __init__(self, uri: str, user: str, password: str, llm_client: LLMClient | None = None): - super().__init__(uri, user, password, llm_client) + def __init__( + self, + uri: str | None = None, + user: str | None = None, + password: str | None = None, + llm_client: LLMClient | None = None, + **kwargs, + ): + super().__init__(uri, user, password, llm_client, **kwargs) # type: ignore async def save_entity_node(self, name: str, uuid: str, group_id: str, summary: str = ''): new_node = EntityNode( @@ -72,11 +79,21 @@ async def delete_episodic_node(self, uuid: str): async def get_graphiti(settings: ZepEnvDep): - client = ZepGraphiti( - uri=settings.neo4j_uri, - user=settings.neo4j_user, - password=settings.neo4j_password, - ) + if settings.db_backend == 'falkordb': + from graphiti_core.driver.falkordb_driver import FalkorDriver + + driver = FalkorDriver( # type: ignore + host=settings.falkordb_host or 'localhost', # type: ignore + port=settings.falkordb_port or 6379, # type: ignore + database=settings.falkordb_database or 'default_db', # type: ignore + ) + client = ZepGraphiti(graph_driver=driver) # type: ignore + else: + client = ZepGraphiti( + uri=settings.neo4j_uri, + user=settings.neo4j_user, + password=settings.neo4j_password, + ) if settings.openai_base_url is not None: client.llm_client.config.base_url = settings.openai_base_url if settings.openai_api_key is not None: @@ -91,11 +108,21 @@ async def get_graphiti(settings: ZepEnvDep): async def initialize_graphiti(settings: ZepEnvDep): - client = ZepGraphiti( - uri=settings.neo4j_uri, - user=settings.neo4j_user, - password=settings.neo4j_password, - ) + if settings.db_backend == 'falkordb': + from graphiti_core.driver.falkordb_driver import FalkorDriver + + driver = FalkorDriver( # type: ignore + host=settings.falkordb_host or 'localhost', # type: ignore + port=settings.falkordb_port or 6379, # type: ignore + database=settings.falkordb_database or 'default_db', # type: ignore + ) + client = ZepGraphiti(graph_driver=driver) # type: ignore + else: + client = ZepGraphiti( + uri=settings.neo4j_uri, + user=settings.neo4j_user, + password=settings.neo4j_password, + ) await client.build_indices_and_constraints()