edgextract
Turn markdown into a knowledge graph with an ontology you write and yes-or-no scores from a local decision model.
Overview
edgextract (github.com/raphaelmansuy/edgextract) turns markdown into a knowledge graph using an ontology you write and cutoffs you own. The ontology is YAML: types, relations with domain and range, and an optional gazetteer of names you already know. Code proposes the names. A local decision model answers one closed yes-or-no at a time. Anything it is unsure about goes to a review queue instead of the graph. This path uses Jev-style open models through Ollama, not hosted Jev. Raphael Mansuy's article says the measured models are tev1 and nimble, and that clef and clef-flash were not tested. Apache-2.0. Version 0.1.0 on crates.io, npm, and PyPI.
Problem: Asking a chat model for a knowledge graph as JSON can look tidy and still be wrong, and the reply does not come with a cutoff you can defend.
Built for: People who already know the kinds of things and the legal links in their notes, and who want unsure links held for a person.
First indexed on Jev Directory: 2026-10-03
Creator and team
- Name
- Raphael Mansuy
- Handle
- @raphaelmansuy
How Jev is used
- Role in the product flow
- Closed yes-or-no, and a pick-one kind, on names and legal links. The ontology drops illegal pairs before any question is sent.
- Primitives
- ChoiceNoul
- State in
- A sentence span plus one closed question: is this a name the ontology can hold, which kind is it, or does this legal link hold.
- Decision out
- A probability from Ollama POST /v1/systemone. Your cutoff then keeps the link, sends it to review, or drops it.
- Split markdown into sentences with character offsets. Propose names from the gazetteer, markdown cues, and an optional GLiNER span finder.
- Type an unknown name with a yes-or-no, then a pick-one kind. Known names are a lookup.
- Drop pairs the ontology forbids, so an illegal link is never asked. Ask one yes-or-no per legal link type.
- Keep, review, or drop by cutoff. The model does not find a span and does not invent a type.
Hosted TypeSafe Jev is not the runtime here. The Python client posts to Ollama at http://localhost:11434/v1/systemone. The library default model is nimble. The CoNLL04 number of record is tev1. The browser demo at raphaelmansuy.github.io/edgextract loads Tev1 ONNX on WebGPU, about a 1 GB download into the browser cache, and the README says no server of theirs sees your text. The demo defaults to Tev1 on WebGPU in the tab. The README says Ollama is one click away. A sample graph in the README keeps one wrong link on purpose (Acme acquired Northwind, while the text says invested in) so you can see why the review queue exists. The comparison that the README says matters is the zero-shot row: closed questions kept fewer wrong links than Mistral Small JSON, and a model trained on CoNLL04 still wins by a wide margin. Together's Tev1 recipe trains the model used for the published CoNLL04 run. The Bespoke Labs Nimble recipe is the open model behind the library default. Ollaya and vLLM Jev are other ways to serve open decision checkpoints. edgextract is the extractor that asks those models yes-or-no questions against an ontology you wrote.
Sourced performance claims
- README, CoNLL04, 288 test sentences, zero-shot, exact-span scoring: edgextract plus tev1 final run, Names F1 0.690 and Links F1 0.388. Mistral Small JSON, 0.643 and 0.330. SpERT trained on CoNLL04, 0.889 and 0.715. Links precision 0.41 versus 0.27 for the chat model. Wrong links kept: 218 versus 504.Source: github.com/raphaelmansuy/edgextract README
- README limits: cutoffs are not calibrated until you run edgextract calibrate. No coreference, and links do not cross sentences. The final CoNLL04 run kept 16 reversed links. The README says it claims nothing about hosted Jev calibration.Source: github.com/raphaelmansuy/edgextract README Honest limits
- docs/article/article.md: Ollama 0.35+ exposes POST /v1/systemone. The article says tev1 and nimble were measured, and clef and clef-flash were not tested. Python SystemOneClient defaults the model to nimble. The README says the published CoNLL04 run used tev1.Source: github.com/raphaelmansuy/edgextract article and src/edgextract/systemone.py
- Public GitHub repo raphaelmansuy/edgextract had 70 stars and 10 forks on 2026-10-05. crates.io, npm @raphael.mansuy/edgextract, and PyPI edgextract were all version 0.1.0. Apache-2.0.Source: GitHub, crates.io, npm, and PyPI, 2026-10-05
Features and stack
Features
- YAML ontology: types, relations with domain and range, optional gazetteer
- Rust crate, Python package, and npm WASM build, each at 0.1.0
- Browser demo on GitHub Pages and a Hugging Face Space
- Review queue for uncertain links. Export JSON, Cypher, or an HTML graph
- edgextract calibrate fits cutoffs on your labels. They start uncalibrated
Stack
- Rust
- Python
- TypeScript WASM demo
- Ollama 0.35+
- tev1 or nimble
Pricing: Apache-2.0. crates.io, PyPI, and npm packages are 0.1.0. Local Ollama or the browser WebGPU demo. The default path does not call hosted Jev.
Links
FAQ
- How do you extract a knowledge graph with a decision model?
- Write the kinds and the legal links in YAML. edgextract proposes names, drops pairs the ontology forbids, and asks one yes-or-no per legal link. Your cutoff keeps the link, sends it to review, or drops it. The README says the model never invents a type.
- Does edgextract call hosted Jev?
- The README and article describe Ollama POST /v1/systemone with tev1 or nimble. The article says clef and clef-flash were not tested. The README says it makes no claim about hosted Jev calibration. The browser demo runs Tev1 ONNX on WebGPU.
- How does tev1 compare with a chat model on CoNLL04?
- On 288 test sentences, zero-shot, the README reports edgextract plus tev1 at Names F1 0.690 and Links F1 0.388. Mistral Small JSON is 0.643 and 0.330. SpERT, trained on CoNLL04, is 0.889 and 0.715. Links precision is 0.41 versus 0.27, with 218 wrong links kept versus 504.
- What happens when the model is unsure?
- The link goes to a review list instead of the graph. Cutoffs start uncalibrated. The README says to run edgextract calibrate on your own labels before you trust them. Direction can still flip: the final CoNLL04 run kept 16 reversed links.
Related learn guides
Original Jev guidance that pairs with this product pattern.
- System One model
The model family behind Jev: parallel typed questions, one forward pass, probabilities you can threshold.
- Where to run Jev
Compare official TypeSafe, Vercel AI Gateway, OpenRouter, Cloudflare Workers AI, and classifier.dev with a fact table.
Related products
Hand-picked neighbors with rich profiles or overlapping tags.