Corpus¶
1. Contents¶
corpus/ provides two committed showcase corpora plus generated raw inputs:
raw/is generated byfetch_corpus.pyfrom a MultiHop-RAG subset plus the hand-picked keyword docs inkeyword_docs/(rare identifiers likeWIDGET-ERR-7741that exercise the exact-keyword contrast). The populatedcorpus/raw/directory is gitignored;fetch_corpus.pyis the source of truth.graph_native/is committed source data: 10 concise, relation-dense real-world dossiers with explicitRelations:bullets. It is designed to test whethergraph-ragbenefits from entity bridges, shared actors, timelines, and relationship-chain prompts.cyber_threat_intel/is a committed bounded MITRE ATT&CK Enterprise STIX export: 60 dossiers spanning intrusion sets, campaigns, malware, tools, techniques, and mitigations with explicituses/mitigatesrelation lines. It is the first heavier graph-native candidate for the expanded flavor run.
The measured baseline_curated rung in
compare/datasets.yaml is scored against
corpus/subset/ — a frozen, hand-curated 11-document slice (10 MultiHop-RAG
articles plus keyword_docs/widget-error-codes.md) picked from corpus/raw/.
Like raw/, it is gitignored because it holds third-party MultiHop-RAG text, so
it is neither committed nor auto-regenerated. To re-run that rung, either
materialize an equivalent slice under corpus/subset/, or point the dataset's
corpus_path at corpus/raw/ — the fetched superset that start-all.sh ingests
by default (a larger, fully reproducible baseline).
2. Setup¶
This copies the keyword docs into corpus/raw/ and appends a MultiHop-RAG slice.
The MultiHop-RAG slice needs the optional datasets package, which is kept out
of the uv-managed deps (its transitive closure is heavy) — install it on demand:
If datasets is unavailable, the script degrades gracefully to keyword-docs only.
The graph-native and cyber-threat corpora are already committed and do not need a fetch step. Use
demo/graph_native_queries.yaml with the
comparison harness for graph-native and
demo/cyber_threat_intel_queries.yaml
for the cyber-threat slice.
3. Real-world graph dataset ladder¶
The next evaluation layer is tracked in compare/datasets.yaml
and summarized in docs/dataset-complexity-report.md.
It orders input datasets by graph complexity so the project can show how approach
rankings change as the corpus moves from curated text to real semi-structured
knowledge bases.
Candidate heavy datasets are mostly generated, not committed:
- STaRK-Prime and STaRK-MAG via the optional
stark-qapackage; - OpenAlex scholarly graph slices;
- GDELT event/news graph slices;
- MITRE ATT&CK cyber-threat graph slices; the bounded
corpus/cyber_threat_intel/slice is committed for repeatable local runs.
Adapter commands and evaluation steps live in corpus/adapters/README.md.