📈 GH Trending Explorer 🎲 Surprise me

← all repos

raphaelmansuy / edgextract

git clone https://github.com/raphaelmansuy/edgextract.git

Turn markdown into a knowledge graph with an ontology you write and a cutoff you own. Closed yes/no decisions, not free-form JSON.

+0
stars, 24h · #34,198
+~0
stars, 7 days · #34,673
+131
stars, 30 days · #3,829
132
★ total
12
forks · 2 open issues

Star history (as recorded here)

2026-10-20 · 131 ★ 2026-10-22 · 132 ★
LanguageTypeScript
LicenseApache-2.0
Created2026-10-03 (19d ago)
Last push1d ago
Watchers1
OwnerUser

Links

README excerpt
# edgextract
**Turn markdown into a knowledge graph with an ontology you write and a cutoff you own.**
Your code proposes names. Your ontology says which kinds and links are legal. A small local decision model answers one closed yes-or-no question at a time. Anything it is unsure about waits for a person instead of silently entering your graph.
 Real output from a local `tev1` run on `13_northwind.md`: open the interactive page · full report · read the article (PDF). One of the five links in that graph is wrong (`Acme ACQUIRED Northwind`; the text says "invested in"). We left it in. That is what the review queue and your cutoff are for. 
## 60-second start
Rust (native): `cargo add edgextract` or `cargo install edgextract`.
Browser WASM: `npm i @raphael.mansuy/edgextract` (demo: GitHub Pages · Hugging Face Space).
 [code] 
No model yet? Everything below runs offline against a stand-in model:
 [code] 
Or from Python, in five lines:
 [code] 
## Try it in your browser
**Hosted demo:** GitHub Pages · Hugging Face Space (direct app) — Chromium with WebGPU; first **Load Tev1** downloads ~1 GB from Hugging Face into the browser cache (no server of ours sees your text). The hosted page **does not call `127.0.0.1:11434`**. Optional Ollama: `?backend=ollama&host=https://your-host` plus `OLLAMA_ORIGINS` (HTTPS required; the browser blocks mixed-content `http://`). Open the Space on `*.hf.space`, not only the Hub iframe.
The Rust crate compiles to WebAssembly, and a small Vite + TypeScript page runs the whole pipeline in a tab. Your text goes only to the decision model you name (by default Tev1 on WebGPU in this tab; Ollama is one click away), never to a server of ours.
 [code] 
 [code] 
- **Bring any document.** Upload or drop a `.md` / `.txt` file, or paste text.
- **Bring any ontology.** Pick one of seven samples (company news, tech docs, research papers, film, medicine, history, CoNLL04), start from a template, upload your own YAML, and edit it with live validation.
- **Names no list knows are still read.** Every capitalized name in your text is put to the model as a closed question ("is this a name this ontology can hold?"), then typed. You can also pin names to an ontology with one click.
- **Own the cutoff.** Two sliders move what is kept, sent to review, or dropped. The decision cache means moving them asks the model nothing new.
- **The model does the extracting.** Step 3 defaults to **WebGPU** in the tab: the header button is **Load Tev1** until weights are ready, then **Extract graph**. The default graph is `raphaelmansuy/tev1-0.8b-onnx-webgpu` (Together Tev1 ONNX; attribution in `docs/THIRD_PARTY_NOTICES.md`). **Ollama** is the other option (`http://localhost:11434`, model `tev1`; set `OLLAMA_ORIGINS`) and remains the Metal/CUDA speed ceiling. Same closed-question JSON either way. There is no rule-based mode in the page. If the backend cannot answer, the graph stays empty.
`make demo-e2e` runs the Playwright suite against a deterministic test dou