Cogito Estella (v0.20.1)

Non-autoregressive decoder heads that turn sentence embeddings into knowledge-graph triples in one forward pass. They power the full mode of cogito-mcp, a document and code memory for agents that answers questions in a few hundred tokens.

Code, tests and benchmarks: https://github.com/DeliVali/cogito-estella

Default weights

encoders.json maps the encoder to its assets and to the decode thresholds they were validated under; cogito-mcp --full reads it on first run and downloads these files from the m2m100-pool/ subfolder.

Assets Triple F1 Licence
m2m100-pool/cogito-prose-ontology-m2mpool{,-s2,-s3}.safetensors + .json sidecars, pool.safetensors + pool.json, vocab-onto-m2mpool.json 0.852 heads and pooling Apache-2.0; M2M-100 encoder MIT (facebook/m2m100_418M, revision 55c2e61b, downloaded from its own repository)

The ensemble decodes 76 relations over a 20k-entity vocabulary. F1 is measured on held-out sentences whose entity and relation combinations never appeared in training, on a slice untouched by threshold selection. Each safetensors file carries its contract (encoder, revision, width, normalization, vocabulary and pooling sha256, F1, step) in its header and sidecar.

The package indexes code without these heads: in full mode a code file gets its graph (defines, contains, calls, imports, inherits) from a tree-sitter parse, and its lines are ranked like the lite index.

Other heads on the same encoder

Standalone research assets, not part of the package's ask/ingest path:

File Task Triple F1
m2m100-pool/cogito-prose-candidates-m2mpool{,-s2,-s3,-s4,-s5}.safetensors + vocab-candidates-m2mpool.json entity-conditioned prose, 60 raw-verb relations (5-model ensemble) 0.878
m2m100-pool/cogito-toolcalls-m2mpool.safetensors tool-call extraction 1.000
m2m100-pool/cogito-code-lora-m2mpool.safetensors + vocab-code-lora-m2mpool.json Python code lines, calls and imports, 501-name vocabulary 0.979

Candidates loads through CogitoGraphExtractor unchanged (pass the checkpoints and vocab above with threshold=0.1, adj_threshold=0.6); tool calls load through a plain GraphDecoder (K=24, node_dim=448, V=8192, R=48). The code head adapts the encoder itself with LoRA (r=32, α=64, dropout 0.1, every attention and feed-forward projection of the 12 encoder layers); a frozen encoder plateaued at 0.38. Its reference loader is load_code_lora.py:

from load_code_lora import load
extract = load()
extract("import numpy as np")   # [('ROOT', 'imports', 'numpy')]

Files at the repository root come from earlier versions and are kept so old releases stay reproducible; the package does not use them.

Usage

pip install cogito-estella              # lite: no torch, does not use these weights
cogito-estella setup docs/              # registers the server with the agents on this machine
pip install "cogito-estella[full]"      # full: these weights, resolved on first run
cogito-mcp docs/ --full --dir .cogito

Estella("docs/").ask(question, deep=True) loads these weights once inside a lite session.

The lite index does not use this repository either: for questions across languages it keeps a vector per sentence from intfloat/multilingual-e5-small (MIT), run with ONNX Runtime and quantized to int8 on first use (118 MB, fetched once from that repository). In full mode one encoder pass now feeds both the graph heads and the retrieval vector: the same facts, 1.7× faster on CPU.

from cogito_estella.integrations.llamaindex_connector import CogitoGraphExtractor
from cogito_estella.mcp.weights import resolve

w = resolve(None, None)
ex = CogitoGraphExtractor([str(c) for c in w.checkpoints], str(w.vocab), pool_path=w.pool,
                          threshold=w.operating_point[0], adj_threshold=w.operating_point[1])
ex.extract("The committee approved the new budget.")    # [(subject, relation, object), ...]

Intended use and limitations

Structured-knowledge extraction for agent memory and GraphRAG ingestion. Entities are chosen among the nouns of a sentence (or caller-supplied candidates) within a 20k-lemma vocabulary and relations among 76 classes; content outside those spaces is not captured. The training oracle is dependency-parse SVO, so graphs over free prose inherit its noise. The pooling was trained on English sentences up to 128 tokens. All heads and the pooling are Apache-2.0.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Space using DeliVali/cogito-estella 1