init: LightRAG + Graphiti as submodules with Nix flake
Impure devShells using uv + Python 3.12 for each project. LD_LIBRARY_PATH set for NixOS native wheel compatibility. Neo4j managed via nix run .#neo4j-start / neo4j-stop. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,14 @@
|
||||
# Neo4j (started via: nix run .#neo4j-start)
|
||||
NEO4J_URI=bolt://localhost:7687
|
||||
NEO4J_USER=neo4j
|
||||
NEO4J_PASSWORD=neo4j
|
||||
|
||||
# LLM via Ollama (OpenAI-compatible)
|
||||
OPENAI_API_KEY=ollama
|
||||
OPENAI_BASE_URL=http://localhost:11434/v1
|
||||
MODEL_NAME=qwen2.5:7b
|
||||
|
||||
# Embeddings via Ollama
|
||||
# nomic-embed-text dim=768, mxbai-embed-large dim=1024
|
||||
EMBEDDING_MODEL=nomic-embed-text
|
||||
EMBEDDING_DIM=768
|
||||
@@ -0,0 +1,18 @@
|
||||
# LLM via Ollama
|
||||
LLM_BINDING=ollama
|
||||
LLM_MODEL=qwen2.5:7b
|
||||
LLM_BINDING_HOST=http://localhost:11434
|
||||
|
||||
# Embeddings via Ollama
|
||||
EMBEDDING_BINDING=ollama
|
||||
EMBEDDING_MODEL=nomic-embed-text
|
||||
EMBEDDING_BINDING_HOST=http://localhost:11434
|
||||
EMBEDDING_DIM=768
|
||||
|
||||
# Storage (local files)
|
||||
RAG_DIR=./rag_storage
|
||||
|
||||
# Server
|
||||
HOST=0.0.0.0
|
||||
PORT=9621
|
||||
WORKERS=1
|
||||
@@ -0,0 +1,5 @@
|
||||
data/
|
||||
.venv/
|
||||
__pycache__/
|
||||
*.pyc
|
||||
.env.*.local
|
||||
@@ -0,0 +1,6 @@
|
||||
[submodule "lightrag"]
|
||||
path = lightrag
|
||||
url = https://github.com/hkuds/lightrag
|
||||
[submodule "graphiti"]
|
||||
path = graphiti
|
||||
url = https://github.com/getzep/graphiti
|
||||
Generated
+27
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"nodes": {
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1776169885,
|
||||
"narHash": "sha256-l/iNYDZ4bGOAFQY2q8y5OAfBBtrDAaPuRQqWaFHVRXM=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "4bd9165a9165d7b5e33ae57f3eecbcb28fb231c9",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
||||
@@ -0,0 +1,114 @@
|
||||
{
|
||||
description = "LightRAG + Graphiti dev environments";
|
||||
|
||||
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
|
||||
outputs = { self, nixpkgs }:
|
||||
let
|
||||
system = "x86_64-linux";
|
||||
pkgs = nixpkgs.legacyPackages.${system};
|
||||
|
||||
startNeo4j = pkgs.writeShellScript "start-neo4j" ''
|
||||
set -e
|
||||
: "''${RAGS_ROOT:=$PWD}"
|
||||
NEO4J_DATA="$RAGS_ROOT/data/neo4j"
|
||||
mkdir -p "$NEO4J_DATA"/{data,logs,run,plugins,import,conf}
|
||||
|
||||
cat > "$NEO4J_DATA/conf/neo4j.conf" <<CONF
|
||||
server.directories.data=$NEO4J_DATA/data
|
||||
server.directories.logs=$NEO4J_DATA/logs
|
||||
server.directories.run=$NEO4J_DATA/run
|
||||
server.directories.plugins=$NEO4J_DATA/plugins
|
||||
server.directories.import=$NEO4J_DATA/import
|
||||
server.bolt.listen_address=:7687
|
||||
server.http.listen_address=:7474
|
||||
dbms.security.auth_enabled=false
|
||||
CONF
|
||||
|
||||
export NEO4J_CONF="$NEO4J_DATA/conf"
|
||||
${pkgs.neo4j}/bin/neo4j start
|
||||
echo ""
|
||||
echo "Neo4j running:"
|
||||
echo " bolt: bolt://localhost:7687"
|
||||
echo " http: http://localhost:7474"
|
||||
echo " stop: RAGS_ROOT=$RAGS_ROOT nix run .#neo4j-stop"
|
||||
echo ""
|
||||
'';
|
||||
|
||||
stopNeo4j = pkgs.writeShellScript "stop-neo4j" ''
|
||||
: "''${RAGS_ROOT:=$PWD}"
|
||||
export NEO4J_CONF="$RAGS_ROOT/data/neo4j/conf"
|
||||
${pkgs.neo4j}/bin/neo4j stop
|
||||
'';
|
||||
|
||||
in {
|
||||
devShells.${system} = {
|
||||
|
||||
lightrag = pkgs.mkShell {
|
||||
packages = [ pkgs.uv pkgs.python312 pkgs.curl ];
|
||||
|
||||
shellHook = ''
|
||||
RAGS_ROOT="$PWD"
|
||||
export VIRTUAL_ENV="$RAGS_ROOT/lightrag/.venv"
|
||||
export UV_PROJECT_ENVIRONMENT="$VIRTUAL_ENV"
|
||||
export UV_PYTHON="${pkgs.python312}/bin/python3.12"
|
||||
export LD_LIBRARY_PATH="${pkgs.lib.makeLibraryPath [ pkgs.stdenv.cc.cc pkgs.zlib ]}:$LD_LIBRARY_PATH"
|
||||
cd "$RAGS_ROOT/lightrag"
|
||||
|
||||
if [ ! -d .venv ]; then
|
||||
echo "Setting up lightrag venv (first time, ~2min)..."
|
||||
uv sync --extra api --quiet
|
||||
fi
|
||||
source .venv/bin/activate
|
||||
|
||||
if [ -f "$RAGS_ROOT/.env.lightrag" ]; then
|
||||
set -a; source "$RAGS_ROOT/.env.lightrag"; set +a
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "LightRAG shell ready."
|
||||
echo " start: lightrag-server"
|
||||
echo " config: $RAGS_ROOT/.env.lightrag"
|
||||
echo " needs: ollama with qwen2.5:7b + nomic-embed-text"
|
||||
echo ""
|
||||
'';
|
||||
};
|
||||
|
||||
graphiti = pkgs.mkShell {
|
||||
packages = [ pkgs.uv pkgs.python312 pkgs.neo4j pkgs.curl ];
|
||||
|
||||
shellHook = ''
|
||||
RAGS_ROOT="$PWD"
|
||||
export VIRTUAL_ENV="$RAGS_ROOT/graphiti/.venv"
|
||||
export UV_PROJECT_ENVIRONMENT="$VIRTUAL_ENV"
|
||||
export UV_PYTHON="${pkgs.python312}/bin/python3.12"
|
||||
export LD_LIBRARY_PATH="${pkgs.lib.makeLibraryPath [ pkgs.stdenv.cc.cc pkgs.zlib ]}:$LD_LIBRARY_PATH"
|
||||
cd "$RAGS_ROOT/graphiti"
|
||||
|
||||
if [ ! -d .venv ]; then
|
||||
echo "Setting up graphiti venv (first time, ~1min)..."
|
||||
uv sync --quiet
|
||||
fi
|
||||
source .venv/bin/activate
|
||||
|
||||
if [ -f "$RAGS_ROOT/.env.graphiti" ]; then
|
||||
set -a; source "$RAGS_ROOT/.env.graphiti"; set +a
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Graphiti shell ready."
|
||||
echo " neo4j: nix run .#neo4j-start (in another terminal, run first)"
|
||||
echo " config: $RAGS_ROOT/.env.graphiti"
|
||||
echo " needs: ollama with qwen2.5:7b + nomic-embed-text"
|
||||
echo ""
|
||||
'';
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
apps.${system} = {
|
||||
neo4j-start = { type = "app"; program = "${startNeo4j}"; };
|
||||
neo4j-stop = { type = "app"; program = "${stopNeo4j}"; };
|
||||
};
|
||||
};
|
||||
}
|
||||
Submodule
+1
Submodule graphiti added at 8e734f298e
Submodule
+1
Submodule lightrag added at a5a3c5a265
Reference in New Issue
Block a user