Skip to content

Graph intelligence for autonomous AI agents

Odin is a Python library that guides AI agents through large knowledge graphs. It combines Personalized PageRank, learned edge-plausibility scoring (NPLL), and pattern detection to surface high-signal paths, so agents spend their compute on what matters.


What Odin provides

Navigation

Guided exploration

Odin is the compass, not the explorer. Given seed entities, it returns ranked, scored paths through the graph, leaving the agent to interpret what it finds instead of drowning in raw traversal.

Structure

Personalized PageRank

PPR identifies the structurally important nodes relative to your seeds, so exploration starts from the parts of the graph that actually matter.

PPR concept →

Semantics

NPLL edge scoring

Neural Probabilistic Logic Learning scores how plausible each edge is, filtering semantically invalid paths that naive traversal would follow.

NPLL concept →

Search

A bounded, best-first walk keeps multi-hop exploration tractable: top-K paths at each hop instead of exponential blow-up.

Beam search →

Patterns

Motifs & triage

Aggregation surfaces recurring motifs and produces a 0-100 triage score, giving agents a single prioritization signal per retrieval.

Aggregation →

Zero-ops ML

Self-managing model

Odin trains its NPLL model from your graph on first run and persists the weights in ArangoDB. No separate ML pipeline, no .pt files to manage.

Model lifecycle →


Quickstart

Install
pip install odin-engine
explore.py
from arango import ArangoClient
from odin import OdinEngine

# 1. Connect to your knowledge graph
client = ArangoClient(hosts="http://localhost:8529")
db = client.db("my_graph", username="root", password="")

# 2. Initialize Odin (auto-trains NPLL from your graph on first run)
engine = OdinEngine(db=db, community_id="global")

# 3. Explore from seed entities
result = engine.retrieve(
    seeds=["entity/claim_123", "entity/provider_456"],
    max_paths=50,
    hop_limit=3,
)

# 4. Read the ranked paths
print(f"Triage score: {result['triage']['score']}/100")
for p in result["paths"][:5]:
    edges = p["edges"]
    nodes = [edges[0]["u"], *(e["v"] for e in edges)] if edges else []
    print(f"  [{p['score']:.2f}]", " -> ".join(str(n) for n in nodes))

Where to start

If you are new to Odin, read in this order:

  1. Getting Started: install, connect ArangoDB, and run your first retrieval
  2. Architecture: the mental model for how the pipeline fits together
  3. Personalized PageRankBeam SearchNPLL: the three scoring signals
  4. Triage & Insight Scoring: how paths become a single prioritization number

If you are evaluating for a specific use case:


Explore the ecosystem

Reference Full API surface, parameters, and result schema. View reference
Source Browse the code, open issues, and submit PRs. GitHub
PyPI Install the released package: odin-engine
Prescott Data The team behind Odin: prescottdata.io

Star us on GitHub

Help more developers discover Odin. Every star makes the project easier to find and keeps it growing.

Build something

Odin is MIT-licensed and made to be extended: new adapters, aggregators, and PPR variants welcome.