Skip to content
Open
Show file tree
Hide file tree
Changes from 31 commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
7bf6688
sync: preserve local workflow files
github-actions[bot] Jun 2, 2026
da27bf5
Merge remote-tracking branch 'upstream/main'
github-actions[bot] Jun 3, 2026
800b150
Merge branch 'apache:main' into main
LRriver Jun 8, 2026
81d89e4
Merge remote-tracking branch 'upstream/main'
github-actions[bot] Jun 15, 2026
af4186a
Merge remote-tracking branch 'upstream/main'
github-actions[bot] Jun 20, 2026
f41baa2
Merge remote-tracking branch 'upstream/main'
github-actions[bot] Jun 21, 2026
b8d4b40
Merge remote-tracking branch 'upstream/main'
github-actions[bot] Jun 23, 2026
1a98cef
Merge remote-tracking branch 'upstream/main'
github-actions[bot] Jun 25, 2026
f3ba75d
sync: preserve local workflow files
github-actions[bot] Jun 25, 2026
e1b23ad
feat(llm): add graph extraction service APIs
LRriver Jun 3, 2026
acda6ce
test(llm): cover graph extraction service APIs
LRriver Jun 3, 2026
5090f0c
feat(llm): support graph extract content modes
LRriver Jun 8, 2026
184bc73
test(llm): cover graph extract content modes
LRriver Jun 8, 2026
e297b3d
fix(llm): harden graph extract runtime parsing
LRriver Jun 8, 2026
402ba2e
test(llm): cover graph extract API edge cases
LRriver Jun 8, 2026
6cedb5c
fix(llm): return workflow node errors safely
LRriver Jun 8, 2026
c435f5c
fix(llm): keep paragraph chunk boundaries
LRriver Jun 8, 2026
3bb0c95
fix(llm): use extract LLM for graph extraction
LRriver Jun 8, 2026
7a6aff6
fix(llm): fall back extract LLM config to chat settings
LRriver Jun 8, 2026
7aa8a50
fix(llm): harden graph extract API follow-up
LRriver Jun 9, 2026
93c7c84
fix(llm): address graph extract API review feedback
LRriver Jun 9, 2026
a2847c5
fix(llm): harden graph extract review follow-up
LRriver Jun 9, 2026
aac86e6
fix(llm): align graph import validation message
LRriver Jun 10, 2026
cd9985d
fix(llm): guard graph import service writes
LRriver Jun 10, 2026
9a044f3
fix(llm): sanitize graph extract error surfaces
LRriver Jun 22, 2026
f1c54ab
test(llm): assert graph routes via openapi contract
LRriver Jun 22, 2026
0c95388
fix(llm): sanitize import warning messages
LRriver Jun 22, 2026
a8b18a4
fix(llm): avoid raw import payload errors
LRriver Jun 22, 2026
a903a18
fix(llm): validate graph import edge endpoints
LRriver Jun 22, 2026
79a3d87
fix(llm): validate graph import properties
LRriver Jun 29, 2026
10524d2
fix(llm): harden graph import contracts
LRriver Jun 29, 2026
8e88ab8
ci: restore upstream workflow coverage
LRriver Jun 30, 2026
8790c28
fix(llm): harden graph import review follow-up
LRriver Jul 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .github/workflows/auto-pr-comment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ jobs:
pull-requests: write
steps:
- name: Add review comment
# This workflow is only enabled in fork repositories to request AI review.
uses: peter-evans/create-or-update-comment@v4
with:
issue-number: ${{ github.event.pull_request.number }}
Expand Down
171 changes: 17 additions & 154 deletions .github/workflows/hugegraph-llm.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,98 +26,34 @@ on:
- 'release-*'
pull_request:

permissions:
contents: read

env:
UV_VERSION: "0.9.22"

jobs:
llm-unit-contract:
build:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: ["3.10", "3.11"]

steps:
- uses: actions/checkout@v6
with:
persist-credentials: false

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python-version }}

- name: Install uv
- name: Prepare HugeGraph Server Environment
run: |
curl -LsSf "https://astral.sh/uv/${UV_VERSION}/install.sh" | sh
echo "$HOME/.local/bin" >> "$GITHUB_PATH"
"$HOME/.local/bin/uv" --version

- name: Cache dependencies
uses: actions/cache@v5
with:
path: |
~/.cache/uv
~/nltk_data
key: ${{ runner.os }}-uv-${{ matrix.python-version }}-${{ hashFiles('**/pyproject.toml', 'uv.lock') }}
restore-keys: |
${{ runner.os }}-uv-${{ matrix.python-version }}-
docker run -d --name=graph -p 8080:8080 -e PASSWORD=admin hugegraph/hugegraph:1.5.0
sleep 10

- name: Install dependencies
run: |
uv sync --extra llm --extra dev
uv run python -c "import nltk; nltk.download('stopwords'); nltk.download('punkt')"

- name: Run unit tests
env:
SKIP_EXTERNAL_SERVICES: true
run: |
uv run pytest hugegraph-llm/src/tests -m "not integration and not hugegraph and not smoke and not external" --cov=hugegraph_llm --cov-fail-under=34 --cov-report=term --cov-report=xml:llm-unit-contract.xml -v --tb=short --durations=20

- name: Upload coverage artifact
uses: actions/upload-artifact@v7
with:
name: llm-unit-contract-coverage-${{ matrix.python-version }}
path: llm-unit-contract.xml
if-no-files-found: error

llm-hugegraph-boundary:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: ["3.10", "3.11"]

services:
hugegraph:
image: hugegraph/hugegraph:1.7.0
env:
PASSWORD: admin
options: --health-cmd="curl -f http://localhost:8080/versions || exit 1" --health-interval=10s --health-timeout=5s --health-retries=8
ports:
- 8080:8080

steps:
- uses: actions/checkout@v6
with:
persist-credentials: false
- uses: actions/checkout@v4

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v6
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}

- name: Install uv
run: |
curl -LsSf "https://astral.sh/uv/${UV_VERSION}/install.sh" | sh
echo "$HOME/.local/bin" >> "$GITHUB_PATH"
"$HOME/.local/bin/uv" --version
curl -LsSf https://astral.sh/uv/install.sh | sh
echo "$HOME/.cargo/bin" >> $GITHUB_PATH

- name: Cache dependencies
uses: actions/cache@v5
uses: actions/cache@v4
with:
path: |
~/.cache/uv
Expand All @@ -131,89 +67,16 @@ jobs:
uv sync --extra llm --extra dev
uv run python -c "import nltk; nltk.download('stopwords'); nltk.download('punkt')"

- name: Run HugeGraph boundary tests
- name: Run unit tests
working-directory: hugegraph-llm
env:
HUGEGRAPH_REQUIRED: true
HUGEGRAPH_URL: http://127.0.0.1:8080
HUGEGRAPH_GRAPH: hugegraph
HUGEGRAPH_USER: admin
HUGEGRAPH_PASSWORD: admin
SKIP_EXTERNAL_SERVICES: false
run: |
uv run pytest hugegraph-llm/src/tests -m "integration and hugegraph" -v --tb=short

- name: Dump HugeGraph diagnostics
if: failure()
run: |
docker ps -a
container_id=$(docker ps -aq --filter ancestor=hugegraph/hugegraph:1.7.0 | head -n 1)
if [ -n "$container_id" ]; then
docker logs "$container_id"
fi

llm-core-smoke:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: ["3.10", "3.11"]

services:
hugegraph:
image: hugegraph/hugegraph:1.7.0
env:
PASSWORD: admin
options: --health-cmd="curl -f http://localhost:8080/versions || exit 1" --health-interval=10s --health-timeout=5s --health-retries=8
ports:
- 8080:8080

steps:
- uses: actions/checkout@v6
with:
persist-credentials: false

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python-version }}

- name: Install uv
run: |
curl -LsSf "https://astral.sh/uv/${UV_VERSION}/install.sh" | sh
echo "$HOME/.local/bin" >> "$GITHUB_PATH"
"$HOME/.local/bin/uv" --version

- name: Cache dependencies
uses: actions/cache@v5
with:
path: |
~/.cache/uv
~/nltk_data
key: ${{ runner.os }}-uv-${{ matrix.python-version }}-${{ hashFiles('**/pyproject.toml', 'uv.lock') }}
restore-keys: |
${{ runner.os }}-uv-${{ matrix.python-version }}-

- name: Install dependencies
SKIP_EXTERNAL_SERVICES: true
run: |
uv sync --extra llm --extra dev
uv run python -c "import nltk; nltk.download('stopwords'); nltk.download('punkt')"
uv run pytest src/tests/config/ src/tests/document/ src/tests/middleware/ src/tests/operators/ src/tests/models/ src/tests/indices/ src/tests/test_utils.py -v --tb=short

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

‼️ The new CI command no longer runs the API/flow/node tests that cover this PR's main behavior. The PR adds or rewrites /graph/extract, jobs, /graph/import, and extract-and-import tests under src/tests/api, plus related flow/node/utils coverage, but this job only runs config/document/middleware/operators/models/indices/test_utils. Please restore an equivalent full unit/contract lane, or at least include src/tests/api src/tests/flows src/tests/nodes src/tests/utils, so these API regressions cannot pass with green checks.


- name: Run deterministic core smoke tests
- name: Run integration tests
working-directory: hugegraph-llm
env:
HUGEGRAPH_REQUIRED: true
HUGEGRAPH_URL: http://127.0.0.1:8080
HUGEGRAPH_GRAPH: hugegraph
HUGEGRAPH_USER: admin
HUGEGRAPH_PASSWORD: admin
SKIP_EXTERNAL_SERVICES: false
run: |
uv run pytest hugegraph-llm/src/tests/integration -m "smoke" -v --tb=short

- name: Dump HugeGraph diagnostics
if: failure()
SKIP_EXTERNAL_SERVICES: true
run: |
docker ps -a
container_id=$(docker ps -aq --filter ancestor=hugegraph/hugegraph:1.7.0 | head -n 1)
if [ -n "$container_id" ]; then
docker logs "$container_id"
fi
uv run pytest src/tests/integration/test_graph_rag_pipeline.py src/tests/integration/test_kg_construction.py src/tests/integration/test_rag_pipeline.py -v --tb=short
95 changes: 15 additions & 80 deletions .github/workflows/hugegraph-python-client.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,96 +7,39 @@ on:
- 'release-*'
pull_request:

permissions:
contents: read

env:
UV_VERSION: "0.9.22"

jobs:
client-unit-contract:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: ["3.10", "3.11"]

steps:
- uses: actions/checkout@v6
with:
persist-credentials: false

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python-version }}

- name: Install uv
run: |
curl -LsSf "https://astral.sh/uv/${UV_VERSION}/install.sh" | sh
echo "$HOME/.local/bin" >> "$GITHUB_PATH"
"$HOME/.local/bin/uv" --version

- name: Cache dependencies
id: cache-deps
uses: actions/cache@v5
with:
path: |
~/.cache/uv
key: ${{ runner.os }}-uv-${{ matrix.python-version }}-${{ hashFiles('**/pyproject.toml') }}
restore-keys: |
${{ runner.os }}-uv-${{ matrix.python-version }}-

- name: Install dependencies with uv sync
run: |
uv sync --extra python-client --extra dev

- name: Run unit and contract tests
run: |
uv run pytest hugegraph-python-client/src/tests -m "unit or contract" --cov=pyhugegraph --cov-fail-under=45 --cov-report=term --cov-report=xml:client-unit-contract.xml -v --tb=short --durations=20

- name: Upload coverage artifact
uses: actions/upload-artifact@v7
with:
name: client-unit-contract-coverage-${{ matrix.python-version }}
path: client-unit-contract.xml
if-no-files-found: error

client-hugegraph-integration:
build:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: ["3.10", "3.11"]
python-version: ["3.10", "3.11", "3.12"]

services:
hugegraph:
image: hugegraph/hugegraph:1.7.0
env:
PASSWORD: admin
options: --health-cmd="curl -f http://localhost:8080/versions || exit 1" --health-interval=10s --health-timeout=5s --health-retries=8
options: --health-cmd="curl -f http://localhost:8080/versions || exit 1" --health-interval=10s --health-timeout=5s --health-retries=5
ports:
- 8080:8080

steps:
- uses: actions/checkout@v6
with:
persist-credentials: false
- uses: actions/checkout@v4

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v6
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}

- name: Install uv
run: |
curl -LsSf "https://astral.sh/uv/${UV_VERSION}/install.sh" | sh
echo "$HOME/.local/bin" >> "$GITHUB_PATH"
"$HOME/.local/bin/uv" --version
curl -LsSf https://astral.sh/uv/install.sh | sh
echo "$HOME/.cargo/bin" >> $GITHUB_PATH

- name: Cache dependencies
id: cache-deps
uses: actions/cache@v5
uses: actions/cache@v4
with:
path: |
~/.cache/uv
Expand All @@ -108,21 +51,13 @@ jobs:
run: |
uv sync --extra python-client --extra dev

- name: Run HugeGraph integration tests
env:
HUGEGRAPH_REQUIRED: true
HUGEGRAPH_URL: http://127.0.0.1:8080
HUGEGRAPH_GRAPH: hugegraph
HUGEGRAPH_USER: admin
HUGEGRAPH_PASSWORD: admin
- name: Test example
run: |
uv run pytest hugegraph-python-client/src/tests -m "integration and hugegraph" -v --tb=short
ls -al
export PYTHONPATH=$(pwd)/hugegraph-python-client/src && echo ${PYTHONPATH}
uv run python hugegraph-python-client/src/pyhugegraph/example/hugegraph_example.py

- name: Dump HugeGraph diagnostics
if: failure()
- name: Test with pytest
run: |
docker ps -a
container_id=$(docker ps -aq --filter ancestor=hugegraph/hugegraph:1.7.0 | head -n 1)
if [ -n "$container_id" ]; then
docker logs "$container_id"
fi
uv run pytest
working-directory: hugegraph-python-client
40 changes: 0 additions & 40 deletions .github/workflows/ruff.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,43 +49,3 @@ jobs:
- name: Lint code with Ruff
run: |
uv run ruff check .

ty-check:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.10", "3.11"] # hugegraph-llm requires <3.12

steps:
- uses: actions/checkout@v4

- name: Setup Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}

- name: Install uv
run: |
curl -LsSf https://astral.sh/uv/install.sh | sh
echo "$HOME/.cargo/bin" >> $GITHUB_PATH

- name: Cache dependencies
id: cache-deps
uses: actions/cache@v4
with:
path: |
~/.cache/uv
~/.cache/pip
key: ${{ runner.os }}-uv-${{ matrix.python-version }}-${{ hashFiles('**/pyproject.toml') }}
restore-keys: |
${{ runner.os }}-uv-${{ matrix.python-version }}-

- name: Install dev + runtime extras
run: |
uv sync --extra dev --extra llm --extra python-client

- name: Type check with ty (non-blocking)
run: uv run ty check hugegraph-llm/src hugegraph-python-client/src
continue-on-error: true
# TODO: extend scope to hugegraph-ml once heavy optional deps (DGL, PyTorch) are handled
# TODO: add graph-mcp once the module is introduced
Loading
Loading