You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: .github/workflows/release.yml
+15-18Lines changed: 15 additions & 18 deletions
Original file line number
Diff line number
Diff line change
@@ -11,16 +11,21 @@ permissions:
11
11
jobs:
12
12
build:
13
13
strategy:
14
+
fail-fast: false
14
15
matrix:
15
16
include:
16
17
- target: x86_64-unknown-linux-gnu
17
18
os: ubuntu-latest
19
+
use_cross: false
18
20
- target: aarch64-unknown-linux-gnu
19
21
os: ubuntu-latest
22
+
use_cross: true
20
23
- target: x86_64-apple-darwin
21
24
os: macos-latest
25
+
use_cross: false
22
26
- target: aarch64-apple-darwin
23
27
os: macos-latest
28
+
use_cross: false
24
29
25
30
runs-on: ${{ matrix.os }}
26
31
@@ -32,24 +37,16 @@ jobs:
32
37
with:
33
38
targets: ${{ matrix.target }}
34
39
35
-
- name: Install cross-compilation tools
36
-
if: matrix.target == 'aarch64-unknown-linux-gnu'
37
-
run: |
38
-
sudo dpkg --add-architecture arm64
39
-
# Add arm64 package sources
40
-
sudo sed -i 's/^deb /deb [arch=amd64] /' /etc/apt/sources.list
41
-
echo "deb [arch=arm64] http://ports.ubuntu.com/ $(lsb_release -cs) main restricted universe multiverse" | sudo tee /etc/apt/sources.list.d/arm64.list
42
-
echo "deb [arch=arm64] http://ports.ubuntu.com/ $(lsb_release -cs)-updates main restricted universe multiverse" | sudo tee -a /etc/apt/sources.list.d/arm64.list
Copy file name to clipboardExpand all lines: README.md
+33-23Lines changed: 33 additions & 23 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -18,16 +18,18 @@ When someone (or an AI agent) asks *"why did we do X?"*, ctxgraph traverses the
18
18
19
19
Every context graph tool today requires heavy infrastructure and sends your data to OpenAI. ctxgraph doesn't.
20
20
21
-
We benchmarked ctxgraph against [Graphiti](https://github.com/getzep/graphiti) (by Zep) on the same 50 software-engineering episodes. ctxgraph extracts higher-quality relations using only local ONNX models — no API calls at all.
21
+
We benchmarked ctxgraph against [Graphiti](https://github.com/getzep/graphiti) (by Zep) on the same 50 software-engineering episodes. ctxgraph extracts higher-quality entities and relations using only local ONNX models — no API calls at all.
22
22
23
23
### Extraction Quality (50-episode benchmark)
24
24
25
-
| System | Relation F1 | API Calls | Cost/Episode| Latency |
ctxgraph achieves **1.65x higher extraction quality** than Graphiti while being **38x faster** and **100% free**.
30
+
\*Graphiti's free-form relations mapped to ctxgraph's taxonomy using generous keyword heuristics.
31
+
32
+
ctxgraph achieves **2.4x higher combined F1** than Graphiti while being **250x faster** and **100% free**.
31
33
32
34
### Infrastructure
33
35
@@ -45,9 +47,15 @@ ctxgraph achieves **1.65x higher extraction quality** than Graphiti while being
45
47
46
48
### Why Graphiti Scores Lower
47
49
48
-
Graphiti makes 6+ GPT calls per episode (entity extraction, deduplication, relation extraction, contradiction detection, summarization, community detection). Despite this, it produces free-form relation names like `COMMUNICATES_ENCRYPTED_WITH` and `PREVENTS_CASCADING_FAILURES_WHEN_DOWN` that don't map cleanly to typed relations. It also frequently gets entity directions wrong (e.g., `Helm:depends_on:Kubernetes` instead of `Kubernetes:depends_on:Helm`).
50
+
Graphiti makes 6+ GPT-4o calls per episode (entity extraction, deduplication, relation extraction, contradiction detection, summarization, community detection). Despite this:
51
+
52
+
-**Entity names are verbose**: Graphiti extracts `"primary Postgres cluster"` instead of `"Postgres"`, `"legacy SOAP endpoint in UserService"` instead of `"SOAP endpoint"`. Semantically correct, but doesn't match canonical names.
53
+
-**Relations are free-form**: Produces verbs like `COMMUNICATES_ENCRYPTED_WITH` and `PREVENTS_CASCADING_FAILURES_WHEN_DOWN` that don't map to a typed taxonomy. Even with generous keyword mapping, only 10/50 episodes produce any matching relations.
54
+
-**Different decomposition**: "Migrate from Redis to Postgres" becomes `(AuthService, CONNECTS_TO, primary Postgres cluster)` instead of `(Postgres, replaced, Redis)` + `(AuthService, depends_on, Postgres)`.
49
55
50
-
ctxgraph uses domain-specific heuristics trained on software engineering patterns — keyword matching, proximity scoring, coreference resolution, and schema-aware type validation — that encode more practical knowledge than GPT can infer from generic prompts.
56
+
ctxgraph uses domain-specific heuristics for software engineering patterns — keyword matching, proximity scoring, coreference resolution, and schema-aware type validation — that produce structured, queryable knowledge without any API calls.
57
+
58
+
See [docs/benchmark.md](docs/benchmark.md) for the full comparison methodology and per-episode results.
0 commit comments