Venn
Documentation · Get started · Concepts · Venn vs Jev · Examples · Task recipes · Adapters · API · Results
Browse all documentation
Project home: Home
Start here: Documentation overview · Getting started · Installation · Concepts · Venn vs Jev
Task guides: Task recipes · Store adapters · Outcome stores
Examples: Choose an example · Hot dog image classifier · Precedent Desk · Wine predictor · Audio classifier · Screen-only arena · Demos and videos
Reference: API reference · Design rationale · Venn 1 model card
Results and limits: Performance and cost · VennSpace-1 · Results and evidence · Reproduction · Semantic boundary findings · Limitations · Comparison video methods · Comparison notebooks and renderer
Project: Policies · Licenses and attribution · Contributing to Venn
Maintainers: Maintainer guide · Documentation site · Release checklist · Publishing the Python package · Publishing the decision head · Development evidence · Comparative evaluation protocol · License audit notes
Project / Home
On this page
A Vector Decision Model: typed decisions over reusable embeddings.
The documentation website includes the guides, examples, API reference, results and demo videos. The same documentation is browsable here or as a local searchable website.
Venn is a Vector Decision Model (VDM), a small decision layer that answers structured questions over embeddings rather than generating text. Give it a vector, or text that its frozen reader embeds, and it returns a typed answer: which team owns this ticket, does this passage belong with these, has the mix of incoming requests shifted, which indexed records match a new policy. Because it reuses the vectors you have already computed, new questions can run through the small decision layer without another reader pass. The generic head is 3.15 MB, and existing-vector decisions run on CPU without loading the reader.
When a lookup is not enough, the same API trains a small custom head on your own data and serves it under the question you were already asking. Your application code does not change: the question names the head, and the answer comes back in the same typed shape. In the Doom arena, a 49,000-parameter head compiled from the game's outcome store played with the store switched off and averaged 8.4 kills per game, against 6.2 for the store it learned from.
The standard text path uses the pinned venn-1 reader. The outcome API also
accepts explicitly tagged vectors from other readers; see
profiles and compatibility.
What you can do
-
Route and classify. Ask Choice, Score and Noul (yes/no) questions about text or vectors, with an explicit "none of these" option. Requests use the Decisions API format, with compatibility checked against these client versions.
-
Decide from recorded outcomes. Point Venn at your own vector store of past cases and their outcomes. It picks the option whose similar past cases went best, and your application writes new outcomes back. No trained head is needed.
-
Train custom heads through the same API. Four kinds, all through
register_family(orPUT /families/{name}over HTTP):- a linear Choice head (
form="linear"), a multinomial logistic regression on your labeled vectors and the best default for plain classification; - the residual Choice head, which can also answer "none of these";
- a numeric head (
objective="regress") that predicts a score with an 80% interval, from examples or a store's outcomes; - a head compiled from an outcome store that answers
nearest_outcomewithout a lookup.
Choice heads train on every supplied example by default; an explicit split reserves selection and report rows. They choose their settings by cross-validation, grouped by
group_idwhen related examples must stay together. Each fits in seconds to minutes on one machine, is saved and reloaded with the service, and answers the same question type the rest of your code already sends. The reader stays frozen; only the head is trained. See the family cookbook, the linear family cookbook, the numeric family cookbook and the outcome API. - a linear Choice head (
-
Work on collections. Find the nearest labeled reference, spot the intruder in a set, test whether a population has shifted, or stream one question over every row of an index.
A few words you will see throughout: a reader is the frozen embedding model; a profile pins the reader, its revision and the vector format; a head is the small model that turns vectors and a question into an answer; Noul is the Decisions API's name for a yes/no question.
Venn or Jev?
Jev evaluates the content and context supplied in a request. Venn lets your application keep and reuse the representation behind its decisions, through historical cases, custom predictors and collection operations. Its small local decision layer also provides an alternative to running a larger open-source decision model. EmbeddingGemma 2's text-only reader has about 270 million parameters; image and audio towers are loaded only when needed.
Start with Jev when useful category descriptions and the item's content carry the answer. Start with Venn when you have useful labeled history, need your own predictor, or expect repeated decisions over the same embedded collection. Read Venn and Jev: when to use which for the trade-offs, examples and results.
https://github.com/user-attachments/assets/ae29eb8c-ee45-46d1-b21c-9b6d9689ccf5
Watch the comparison with examples of historical outcomes, filing conventions and custom predictors.
Venn is a research preview. Probabilities are not calibrated across tasks, and the "none of these" option is a signal rather than a filter: an off-topic question can still land on a listed option with high confidence. Read the limitations before acting on a probability.
Install
Python 3.12 on Linux or Windows. CPU workflows also run on ARM64, including Ubuntu under WSL and native Windows; see platform setup.
git clone https://github.com/markrussinovich/venn-vdm.git venn
cd venn
python3.12 -m venv .venv && source .venv/bin/activate
python -m pip install torch --index-url https://download.pytorch.org/whl/cpu # CPU-only PyTorch; omit for CUDA
python -m pip install .
Try it in a minute
venn quickstart runs on CPU and downloads nothing. It registers a small store
of past support tickets with their outcomes, then routes a new ticket to the
team whose similar tickets went best:
venn quickstart
{
"answer": "account",
"options": {
"account": {"mean": 0.9, "count": 3, "evidence_ids": ["acct-102", "acct-101", "acct-103"]},
"billing": {"mean": 0.4, "count": 3, "evidence_ids": ["bill-201", "bill-202", "bill-203"]}
},
"note": "authored vectors, not text embeddings; nothing was downloaded"
}
The same API with your own vectors is in examples/outcome_store.py and the outcome API guide.
Ask questions about text
Text questions use the venn-1 profile: the EmbeddingGemma 2 reader plus a
3 MB decision head. Install the reader extra, download both and start the server:
python -m pip install '.[embedding]'
venn download-embedder # EmbeddingGemma 2 (Apache-2.0), about 1.49 GB of weights
venn serve # downloads the venn-1 head on first run
In another terminal:
curl http://127.0.0.1:8000/api/alpha/decisions -H 'Content-Type: application/json' -d '{
"model": "venn-1",
"state": "I cannot sign in",
"questions": {"team": {"type": "choice", "instructions": "Who owns this ticket?",
"criteria": {"account": "Login or access", "billing": "Payments", "no_match": null}}}
}'
The response names a team, gives its probability and says whether Venn abstained. The first text request also loads the reader, which takes a few seconds. Later requests avoid that cold load; fresh content still needs embedding. examples/route_ticket.py does the same from Python. The API reference covers Score, Noul, the space-level question types, the JavaScript client and the MCP bridge.
Learn more
- Documentation overview: choose a path through concepts, guides, examples and reference.
- Getting started: install and obtain a first result without model downloads.
- Installation: CPU PyTorch, Windows/ARM64 and optional extras.
- Example catalog: pick a complete workflow by its prerequisites.
- Task recipes and outcome stores: build common operations.
- Concepts and API reference: understand the model and request contracts.
- Performance and cost, evidence and limitations: assess the results and their scope.
Watch it learn to play
https://github.com/user-attachments/assets/f072587e-9dee-4b6a-b115-aee7d4e21ca5
The arena example drives a ViZDoom player with nothing but Venn's outcome API and a FAISS store. Venn embeds each screen, looks up how similar moments turned out for each move, and returns the move with the best recorded outcome. Finished games are written back to the store. The reader is never trained.
One more call compiles that store into a head of 49,153 parameters that answers the same question with no lookup. Served alone, the head averaged 8.4 kills per game over 250 scored games against 6.2 for the memory it learned from. Run it yourself or read what the video shows.
For text, the Precedent Desk example points Venn at a support desk's 10,003 closed tickets and routes new ones from them, with precedents, a queue-fit flag and a one-pass backlog sweep. On the same 3,080 public test tickets the closed tickets scored 93.6% against 79.7% for a matched run of Jev 1.13, and the pattern repeats on a second dataset. Video, 2 minutes 36 seconds.
Project
- Code is MIT-licensed. The EmbeddingGemma 2 reader and the
venn-1head have their own terms; see licenses. - The distribution is named
venn-vdmand the import name isvenn. Do not install it alongside the unrelatedvennpackage. - Cite with CITATION.cff. See contributing and security.
Metadata
Release files for venn-vdm 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| venn_vdm-0.1.0.tar.gz | 3.2 MB | With provenance | Details for venn_vdm-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| venn_vdm-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for venn_vdm-0.1.0-py3-none-any.whl |
Total release size: 3.3 MB
Release files / venn_vdm-0.1.0.tar.gz
| Download URL | venn_vdm-0.1.0.tar.gz |
|---|---|
| Size | 3.2 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f144fda59bcbd08b8fe69d40d26471bb5241ce760bbae848d85800f9a9502b46
|
|
BLAKE2b-256 checksum How to use checksums |
fd75995a30c702843315b3d78205f1c6099901864642b0fac457e9778fc5ac4a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 9, 2026.
Transparency logRelease files / venn_vdm-0.1.0-py3-none-any.whl
| Download URL | venn_vdm-0.1.0-py3-none-any.whl |
|---|---|
| Size | 105.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
fe9887e08e785bc6e29c4c53cde9723971d8e3a53ffb07338402747f38f389ea
|
|
BLAKE2b-256 checksum How to use checksums |
156db10cdc8eca328040112b95d5065dbc7a7001c7504cf79270e4e1e5059541
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 9, 2026.
Transparency logSecurity for venn-vdm 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for venn_vdm-0.1.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 9, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.