Ask for “a spiral galaxy”
One command in the quickstart loads ten thousand Wikipedia articles, pictures included, into a table on your laptop. Antfly reads the pictures with a model that understands words and images together, so nobody has to caption or tag them. Type “a spiral galaxy” and these three come back first. Every search on this page ran against that same table.
NGC 2857
NGC 1084
NGC 2276
Flip the reranker on
Keyword and semantic search each rank the same articles differently, and fusion merges the two lists. A reranker then reads the candidates themselves and scores each one against the question. The switch swaps in the reranked list from the same run.
keyword Einstein with semantic “theory of relativity and physics”
- 1Daniel Q. Posinfound by keyword and semantic
- 2Felix Piranifound by keyword and semantic
- 3Gene Federicofound by keyword
- 4Frederik Belinfantefound by semantic
- 5Judith Blaufound by keyword
- 6Harold Horton Sheldonfound by semantic
- 7Eva J. Engelfound by keyword
- 8Relativity Televisionfound by semantic
Fused: keyword and semantic results merged by reciprocal rank fusion. Two candidates tie for first.
Pull out the entities
Antfly can also read each document as it arrives and pull out the things it names: people, places, universities, theories. You say which kinds matter to you, and a small extraction model finds them, with no rules to write. Below is the result over sixteen more Wikipedia articles, the introductions of physicists from to . Eight of them share the node, four share , and where one physicist’s introduction names another, the two link directly: to , Bohr to , to and . Store those links in a graph index and a query can walk from one article to the others through what they mention.
Hover or click a node. Squares are articles; circles are the names it pulled out of them.
Inside the engine
A retrieval pipeline usually grows one piece at a time: a chunker, an embedding API, a vector index, a keyword engine beside it, and a reranker, each with its own copy of the document ids. In Antfly they are stages of one engine over one set of ids. You keep your sources and your generative model; the rest runs as documents arrive.
- Chunking
- Text and multimodal content split for embedding.
- Embedding
- Local models for text, images, and audio; no per-request API.
- Extraction
- An extraction model (GLiNER2) pulls the people, places, and dates a document names into typed fields you can filter and aggregate on.
- Indexing
- Full-text, vector, graph, and typed values on the same documents.
- Fusion
- Keyword and vector results merged by rank or by score.
- Reranking
- A cross-encoder scores the candidates in one batched call.
- Pruning
- The weak tail is dropped before the result leaves the engine.
Change the model, keep the table
Chunks, embeddings, transcripts, and extracted entities are artifacts derived from the source document, and any index can build from them. Swap the embedder and the engine re-embeds from the stored chunks; you never re-insert a document to change the embedder. Each index reports its own readiness, and a document whose enrichment failed is listed as failed until it is reprocessed.
Inputs
- Text and JSON
- Inserted directly or by URL.
- PDFs
- Born-digital parsing, with OCR for pages that carry no text.
- Images
- CLIP-style embeddings, so a text query can return an image.
- Audio
- Whisper transcribes it, and the transcript is searched as text.
