NVIDIA/auto-ontologyPublic

Auto Ontology is a Python framework for building semantic, graph-based reasoning layers over data. It enables deterministic query generation, better context retrieval, and more explainable AI for LLM and agent workflows.

AI summary: A Python framework for building semantic, graph-based reasoning layers over data.

Stars
6.5K
+1.7K today
Forks
512
Watchers
39
Open issues
27
Open PRs
13
Contributors
~12
Commits
1.4K
Branches
92
Views (30d)
2

PythonApache-2.0Created Apr 27, 2026Last push today+1.7K stars this week+1.7K this month

Quick answers

What is auto-ontology?
A Python framework for building semantic, graph-based reasoning layers over data.
What does auto-ontology do?
Auto Ontology is a Python framework designed to build semantic reasoning layers. It leverages graph-based structures to enhance data interpretation and context retrieval. The tool enables deterministic query generation for more reliable data interactions. It provides explainable AI capabilities for LLM and agent workflows. This significantly improves the transparency and accuracy of complex AI systems.
Who is auto-ontology for?
Data scientists and AI engineers building complex, reasoning-driven LLM applications. It is particularly valuable for projects requiring high accuracy and explainability. Familiarity with Python, knowledge graphs, and semantic data is highly recommended.
How do I get started with auto-ontology?
git clone https://github.com/NVIDIA/auto-ontology
How popular is auto-ontology on GitHub?
NVIDIA/auto-ontology has 6,485 stars and 512 forks on GitHub, and gained 1,669 stars in the last 7 days.
What license does auto-ontology use?
NVIDIA/auto-ontology is released under the Apache-2.0 license.

Star history

since Nov 4, 2026
02K4K6KNov 2026Nov 2026Nov 2026Nov 2026
6.5K stars as of Nov 5, 2026. Measured daily since Nov 4, 2026; GitHub no longer exposes earlier star timestamps.

Contribution activity

commits per day, last 52 weeks
NovDecJanFebMarAprMayJunJulAugSepOctNovMonWedFri2025-11-09: 0 commits2025-11-10: 0 commits2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 0 commits2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 0 commits2025-12-16: 0 commits2025-12-17: 0 commits2025-12-18: 0 commits2025-12-19: 0 commits2025-12-20: 0 commits2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 0 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 0 commits2025-12-29: 0 commits2025-12-30: 0 commits2025-12-31: 0 commits2026-01-01: 0 commits2026-01-02: 0 commits2026-01-03: 0 commits2026-01-04: 0 commits2026-01-05: 0 commits2026-01-06: 0 commits2026-01-07: 0 commits2026-01-08: 0 commits2026-01-09: 0 commits2026-01-10: 0 commits2026-01-11: 0 commits2026-01-12: 0 commits2026-01-13: 0 commits2026-01-14: 0 commits2026-01-15: 0 commits2026-01-16: 0 commits2026-01-17: 0 commits2026-01-18: 0 commits2026-01-19: 0 commits2026-01-20: 0 commits2026-01-21: 0 commits2026-01-22: 0 commits2026-01-23: 0 commits2026-01-24: 0 commits2026-01-25: 0 commits2026-01-26: 0 commits2026-01-27: 0 commits2026-01-28: 0 commits2026-01-29: 0 commits2026-01-30: 0 commits2026-01-31: 0 commits2026-02-01: 0 commits2026-02-02: 0 commits2026-02-03: 0 commits2026-02-04: 0 commits2026-02-05: 0 commits2026-02-06: 0 commits2026-02-07: 0 commits2026-02-08: 0 commits2026-02-09: 0 commits2026-02-10: 0 commits2026-02-11: 0 commits2026-02-12: 0 commits2026-02-13: 0 commits2026-02-14: 0 commits2026-02-15: 0 commits2026-02-16: 0 commits2026-02-17: 0 commits2026-02-18: 0 commits2026-02-19: 0 commits2026-02-20: 0 commits2026-02-21: 0 commits2026-02-22: 0 commits2026-02-23: 0 commits2026-02-24: 0 commits2026-02-25: 0 commits2026-02-26: 0 commits2026-02-27: 0 commits2026-02-28: 0 commits2026-03-01: 0 commits2026-03-02: 0 commits2026-03-03: 0 commits2026-03-04: 0 commits2026-03-05: 0 commits2026-03-06: 0 commits2026-03-07: 0 commits2026-03-08: 0 commits2026-03-09: 0 commits2026-03-10: 0 commits2026-03-11: 0 commits2026-03-12: 0 commits2026-03-13: 0 commits2026-03-14: 0 commits2026-03-15: 0 commits2026-03-16: 0 commits2026-03-17: 0 commits2026-03-18: 0 commits2026-03-19: 0 commits2026-03-20: 0 commits2026-03-21: 0 commits2026-03-22: 0 commits2026-03-23: 0 commits2026-03-24: 0 commits2026-03-25: 0 commits2026-03-26: 0 commits2026-03-27: 0 commits2026-03-28: 0 commits2026-03-29: 0 commits2026-03-30: 0 commits2026-03-31: 0 commits2026-04-01: 0 commits2026-04-02: 0 commits2026-04-03: 0 commits2026-04-04: 0 commits2026-04-05: 0 commits2026-04-06: 1 commit2026-04-07: 0 commits2026-04-08: 0 commits2026-04-09: 0 commits2026-04-10: 1 commit2026-04-11: 0 commits2026-04-12: 5 commits2026-04-13: 14 commits2026-04-14: 4 commits2026-04-15: 10 commits2026-04-16: 17 commits2026-04-17: 0 commits2026-04-18: 0 commits2026-04-19: 3 commits2026-04-20: 13 commits2026-04-21: 6 commits2026-04-22: 0 commits2026-04-23: 17 commits2026-04-24: 0 commits2026-04-25: 0 commits2026-04-26: 1 commit2026-04-27: 9 commits2026-04-28: 7 commits2026-04-29: 7 commits2026-04-30: 11 commits2026-05-01: 0 commits2026-05-02: 0 commits2026-05-03: 2 commits2026-05-04: 0 commits2026-05-05: 2 commits2026-05-06: 2 commits2026-05-07: 2 commits2026-05-08: 0 commits2026-05-09: 0 commits2026-05-10: 0 commits2026-05-11: 6 commits2026-05-12: 2 commits2026-05-13: 12 commits2026-05-14: 11 commits2026-05-15: 0 commits2026-05-16: 0 commits2026-05-17: 0 commits2026-05-18: 12 commits2026-05-19: 4 commits2026-05-20: 7 commits2026-05-21: 0 commits2026-05-22: 0 commits2026-05-23: 0 commits2026-05-24: 10 commits2026-05-25: 7 commits2026-05-26: 3 commits2026-05-27: 10 commits2026-05-28: 5 commits2026-05-29: 0 commits2026-05-30: 0 commits2026-05-31: 3 commits2026-06-01: 1 commit2026-06-02: 5 commits2026-06-03: 3 commits2026-06-04: 9 commits2026-06-05: 0 commits2026-06-06: 0 commits2026-06-07: 9 commits2026-06-08: 9 commits2026-06-09: 16 commits2026-06-10: 20 commits2026-06-11: 16 commits2026-06-12: 3 commits2026-06-13: 7 commits2026-06-14: 20 commits2026-06-15: 5 commits2026-06-16: 9 commits2026-06-17: 3 commits2026-06-18: 3 commits2026-06-19: 1 commit2026-06-20: 1 commit2026-06-21: 3 commits2026-06-22: 18 commits2026-06-23: 17 commits2026-06-24: 5 commits2026-06-25: 28 commits2026-06-26: 0 commits2026-06-27: 0 commits2026-06-28: 12 commits2026-06-29: 8 commits2026-06-30: 18 commits2026-07-01: 2 commits2026-07-02: 3 commits2026-07-03: 0 commits2026-07-04: 0 commits2026-07-05: 2 commits2026-07-06: 10 commits2026-07-07: 12 commits2026-07-08: 7 commits2026-07-09: 9 commits2026-07-10: 3 commits2026-07-11: 4 commits2026-07-12: 7 commits2026-07-13: 15 commits2026-07-14: 11 commits2026-07-15: 12 commits2026-07-16: 11 commits2026-07-17: 1 commit2026-07-18: 0 commits2026-07-19: 1 commit2026-07-20: 5 commits2026-07-21: 7 commits2026-07-22: 16 commits2026-07-23: 3 commits2026-07-24: 0 commits2026-07-25: 1 commit2026-07-26: 22 commits2026-07-27: 14 commits2026-07-28: 3 commits2026-07-29: 6 commits2026-07-30: 7 commits2026-07-31: 0 commits2026-08-01: 1 commit2026-08-02: 10 commits2026-08-03: 4 commits2026-08-04: 18 commits2026-08-05: 10 commits2026-08-06: 11 commits2026-08-07: 1 commit2026-08-08: 0 commits2026-08-09: 1 commit2026-08-10: 8 commits2026-08-11: 5 commits2026-08-12: 9 commits2026-08-13: 5 commits2026-08-14: 1 commit2026-08-15: 0 commits2026-08-16: 2 commits2026-08-17: 7 commits2026-08-18: 4 commits2026-08-19: 6 commits2026-08-20: 3 commits2026-08-21: 0 commits2026-08-22: 1 commit2026-08-23: 7 commits2026-08-24: 12 commits2026-08-25: 12 commits2026-08-26: 11 commits2026-08-27: 6 commits2026-08-28: 1 commit2026-08-29: 0 commits2026-08-30: 10 commits2026-08-31: 3 commits2026-09-01: 1 commit2026-09-02: 6 commits2026-09-03: 4 commits2026-09-04: 0 commits2026-09-05: 0 commits2026-09-06: 13 commits2026-09-07: 11 commits2026-09-08: 4 commits2026-09-09: 4 commits2026-09-10: 13 commits2026-09-11: 0 commits2026-09-12: 0 commits2026-09-13: 0 commits2026-09-14: 7 commits2026-09-15: 7 commits2026-09-16: 3 commits2026-09-17: 6 commits2026-09-18: 0 commits2026-09-19: 0 commits2026-09-20: 0 commits2026-09-21: 0 commits2026-09-22: 9 commits2026-09-23: 7 commits2026-09-24: 0 commits2026-09-25: 0 commits2026-09-26: 1 commit2026-09-27: 0 commits2026-09-28: 11 commits2026-09-29: 16 commits2026-09-30: 17 commits2026-10-01: 10 commits2026-10-02: 0 commits2026-10-03: 0 commits2026-10-04: 7 commits2026-10-05: 1 commit2026-10-06: 9 commits2026-10-07: 14 commits2026-10-08: 13 commits2026-10-09: 0 commits2026-10-10: 0 commits2026-10-11: 6 commits2026-10-12: 3 commits2026-10-13: 9 commits2026-10-14: 9 commits2026-10-15: 9 commits2026-10-16: 0 commits2026-10-17: 1 commit2026-10-18: 2 commits2026-10-19: 4 commits2026-10-20: 3 commits2026-10-21: 0 commits2026-10-22: 1 commit2026-10-23: 1 commit2026-10-24: 0 commits2026-10-25: 11 commits2026-10-26: 4 commits2026-10-27: 0 commits2026-10-28: 1 commit2026-10-29: 0 commits2026-10-30: 0 commits2026-10-31: 0 commits2026-11-01: 1 commit2026-11-02: 1 commit2026-11-03: 9 commits2026-11-04: 0 commits2026-11-05: 0 commits2026-11-06: 0 commits2026-11-07: 0 commits
1,107 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Rising fast

    +1,669 stars this week

  • Very active

    1,107 commits in 52 weeks

  • Permissive license

    Apache-2.0

What auto-ontology does

Auto Ontology is a Python framework designed to build semantic reasoning layers. It leverages graph-based structures to enhance data interpretation and context retrieval. The tool enables deterministic query generation for more reliable data interactions. It provides explainable AI capabilities for LLM and agent workflows. This significantly improves the transparency and accuracy of complex AI systems.

Data scientists and AI engineers building complex, reasoning-driven LLM applications. It is particularly valuable for projects requiring high accuracy and explainability. Familiarity with Python, knowledge graphs, and semantic data is highly recommended.

  • Semantic reasoning: builds graph-based layers to improve data interpretation and context.
  • Deterministic querying: enables reliable and predictable query generation over structured data.
  • Explainable AI: provides transparency into the reasoning processes of LLM workflows.
  • Graph structures: utilizes knowledge graphs to represent complex semantic relationships.
  • Python framework: offers a comprehensive set of tools integrated into the Python ecosystem.

Where teams use it

Build reasoning layers

Implement semantic graphs to improve the context retrieval of AI agents.

Generate reliable queries

Use deterministic methods to query complex datasets with high accuracy.

Enhance LLM workflows

Add explainable reasoning capabilities to large language model applications.

Improve data context

Structure unstructured data into semantic graphs for better understanding.

Getting started: git clone https://github.com/NVIDIA/auto-ontology

README

main branch

Auto-Ontology

An open context layer that helps agents give fewer wrong answers on enterprise data.

License: Apache-2.0 Docs

Why Auto-Ontology

Agents can retrieve documents and query databases, but reliability is what gates agentic analytics: a revenue figure delivered faster is worth nothing if it's wrong. Before an agent queries, it needs to know where the data lives, what it means, whether to use it, how to use it, where it came from, and what is similar.

Auto-Ontology is a service you run next to your databases to give agents that context. It compiles their metadata into an ontology: business terms mapped to columns, reviewed SQL for measures, and the relationships between tables. Agents query through the ontology, and people review it in a web UI. It complements the semantic models you already own.

With Auto-Ontology, developers can:

  • Discover. Generate an ontology from database metadata, import existing semantic models, and explore the result as a semantic graph.
  • Ground. Give agents one definition per business concept, mapped across tables and databases.
  • Certify. Review, edit, and certify definitions in the UI or through the API.
  • Validate. Check whether a question is answerable before querying, and return the SQL and the agent's steps with each answer.
  • Expose. Serve context to any agent harness through MCP, agent skills, and a REST API.

The usual shortcut is to paste the schema into the agent's context window. Auto-Ontology gives the agent tools over the ontology:

Schema in the context window Auto-Ontology tools
Tokens Grow with every table and column Only the terms and tables the question touches
Meaning Column names; the agent infers the rest Business terms mapped to columns and SQL
Joins and measures Improvised per question Resolved relationships and reviewed SQL expressions
Unanswerable questions Answered confidently, often wrongly Answerability check, so the agent asks to clarify

Evaluation

The companion repository, auto-ontology-eval, measures ontology performance on benchmarks and evals.

For BIRD, BEAVER, FDABench-Lite, and Wide World Importers, each eval item pairs a question with gold SQL, and a run asks every question of the same model twice:

  • Control. The model gets the database schema in its prompt.
  • Treatment. Auto-Ontology's question-answering agent, the one behind Chat, works from the compiled ontology.

A deterministic verifier scores the SQL from each arm by execution match, using each benchmark's official rule where it has one. The report gives the accuracy difference and lists the questions the ontology fixed and the ones it broke. BIRD-Interact, a multi-turn benchmark where the agent asks clarifying questions, runs on its own harness.

To run the comparison on BIRD, follow the auto-ontology-eval setup, then run:

uv run python main.py --database-name bird

Quickstart

This runs Auto-Ontology with Docker Compose against Wide World Importers, Microsoft's sample sales database. You need Docker with Compose v2, uv, and an NVIDIA API key (nvapi-...) from build.nvidia.com.

  1. Clone the repository and create .env:

    git clone https://github.com/NVIDIA/auto-ontology.git && cd auto-ontology
    cp .env.example .env

    Then set these values in .env:

    DEFAULT_MODELS_API_KEY=nvapi-...
    AUTH_SECRET=<a long random string, e.g. from openssl rand -base64 32>
    APP_URL=http://localhost:3000
    POSTGRES_PASSWORD=<a new password>
    CONNECTION_STRINGS=postgresql://postgres:<the same password>@postgres:5432/wideworldimporters
    AUTO_ONTOLOGY_ADMIN_PASSWORD=<a new password>
    PGADMIN_PASSWORD=<a new password>

    Compose publishes Postgres, pgAdmin, and the web app on the host, so replace each default password before you start it. .env.example also sets an API key per model role: replace each nvapi-your-api-key-here with your key, or delete those lines so they fall back to DEFAULT_MODELS_API_KEY.

  2. Start Postgres and load the sample database. The seed script lives in auto-ontology-eval; pass it the Postgres password you set:

    docker compose up -d --wait postgres
    git clone https://github.com/NVIDIA/auto-ontology-eval.git ../auto-ontology-eval
    (cd ../auto-ontology-eval && uv sync && cp .env.example .env && \
      POSTGRES_PASSWORD='<the same password>' \
      uv run python scripts/seed/seed_wwi.py --database-name wideworldimporters --drop)
  3. Build and start the rest of the stack:

    docker compose up -d --build
  4. Open http://localhost:3000 and sign in with AUTO_ONTOLOGY_ADMIN_EMAIL and AUTO_ONTOLOGY_ADMIN_PASSWORD from .env. Go to Settings → Semantic Compilation and turn it on. Ingestion runs at startup; compilation starts immediately and reports Semantic compilation is ready when it finishes.

  5. Ask a question in Chat:

    What was revenue for the USB food flash drive - sushi roll in Pennsylvania in June 2015?

    The agent resolves revenue, product, and state to terms in the ontology, follows their relationships to the joins it needs, and runs the query. The answer comes back with its SQL and the steps that produced it, so you can check the result against the source:

    Answer:  Revenue for USB food flash drive - sushi roll in Pennsylvania in
             June 2015 was $588.80, from 3 invoice lines.
    
    SQL:     SELECT SUM(il.extendedprice) AS revenue, COUNT(*) AS invoice_lines
             FROM sales.invoicelines il
             JOIN sales.invoices i             ON il.invoiceid = i.invoiceid
             JOIN warehouse.stockitems si      ON il.stockitemid = si.stockitemid
             JOIN sales.customers c            ON i.customerid = c.customerid
             JOIN application.cities ct        ON c.deliverycityid = ct.cityid
             JOIN application.stateprovinces sp ON ct.stateprovinceid = sp.stateprovinceid
             WHERE si.stockitemname = 'USB food flash drive - sushi roll'
               AND sp.stateprovincename = 'Pennsylvania'
               AND i.invoicedate >= '2015-06-01' AND i.invoicedate < '2015-07-01'
    
    Steps:   Resolved terms: Invoice Line (revenue), Stock Item, State Province, Invoice
             Joined: invoice line -> invoice -> customer -> city -> state province
             Validated the filter values against the data, then executed
    
  6. Ask something the data can't answer. Wide World Importers has no advertising data, so a question about ad spend has nothing to resolve against. An agent connected through MCP checks answerability first and asks you to clarify:

    You:    What was return on ad spend for the sushi roll flash drive in June 2015?
    Agent:  check_answerable -> coverage 0.5; no term covers "ad spend"
    Agent:  I can find revenue for that product, but this data has no
            advertising spend, so I can't compute return on ad spend. Do you
            want June 2015 revenue instead, or is ad spend tracked in another
            source I should connect?
    

If the UI loads without its left navigation after a restart, the browser is holding a stale session cookie. Clear site data for localhost:3000 and sign in again. For other setup failures, see the setup skill's troubleshooting guide.

How it works

Auto-Ontology architecture

Auto-Ontology works in three stages: it generates an ontology, people certify it, and the agent answers questions from it.

The ontology holds three kinds of definition:

  • Terms. Business concepts such as Customer or Invoice Line, each with a description and synonyms, mapped to the columns that hold them.
  • SQL attributes. Reviewed SQL expressions under a term, such as a margin or a rolling total. The agent reuses them, so answers compute each measure the same way.
  • Relationships. How tables join, including bridge tables, inferred from keys and from the data.

Generate. The ingestion service builds a first draft from the source databases:

  1. Read sources: extract schemas, profile columns, and sample values into the catalog.
  2. Name entities: extract terms table by table and map each to columns.
  3. Resolve relationships: infer joins between tables and bridge tables, and suggest SQL attributes from query history.
  4. Write the ontology: store terms, relationships, and SQL attributes in Postgres, with embeddings in pgvector for retrieval.

The result is a semantic graph you can explore in the UI. In this example, one compilation of Wide World Importers produced 31 terms; selecting Order shows its description, related terms, mapped columns, and SQL attributes:

Semantic graph of the Wide World Importers ontology, with the Order term selected

Certify. People make the draft trustworthy:

  1. Test with real questions in Chat, or with check_answerable and ask_question over MCP.
  2. Refine terms, descriptions, and SQL attributes in the UI or through the API.
  3. Certify names, descriptions, and SQL attributes once they're correct.

Answer. For each question, the agent:

  1. Classifies the intent and extracts the entities the question names.
  2. Retrieves candidate terms, columns, and SQL attributes by embedding search.
  3. Writes SQL from those candidates.
  4. Checks the filter values and the query against the database, repairing the SQL when a check fails.
  5. Runs the query and returns the answer with its SQL and the steps it took.

When the candidates can't support a query, the agent reports that the question can't be answered from this data. Predictive questions go to KumoRFM when it's configured (see Predictions).

In Chat, each answer shows its SQL, and you can view the rows, download them as CSV, or read them as a chart:

Chat answering which products drive the most revenue and highest customer count, with the generated SQL and a revenue chart

Auto-Ontology is compatible with Apache Ossie, the open standard for exchanging semantic models. Ossie includes a converter for Auto-Ontology, which Auto-Ontology uses to import and export model definitions as Ossie YAML. Use Settings → Import / Export, or POST /api/model/import and POST /api/model/export.

Component Technology Role Port
Frontend Next.js, Better Auth, Prisma Web UI, authentication, public API gateway 3000
Backend FastAPI (Python 3.12+), LangChain Text-to-SQL agent, catalog, ontology APIs 3001
Ingestion service FastAPI (Python 3.12+) Ingestion and semantic compilation 3002
MCP server FastMCP Read-only agent tools over the public API 3003
Postgres + pgvector PostgreSQL 17 Catalog, ontology, app data, vector store 5432
HashiCorp Vault Optional Connection credential storage n/a

Keep ports 3001 and 3002 on a private network. FastAPI trusts the user identity the frontend forwards in the x-auto-ontology-user-id header, and the ingestion service's endpoints (ingest, delete, reset, compile) have no authentication of their own. Clients go through the web app on port 3000.

Use it from your agent

MCP server

The MCP server gives any MCP client read-only tools over the ontology. Each user signs in through Auto-Ontology, and every call runs with that user's permissions.

Job Tools
Readiness check_readiness: can this deployment answer anything at all
Terms search_terms, get_term, get_term_columns, get_term_sql_attributes, get_sql_attribute, describe_table
Answerability check_answerable: does the ontology cover this question
Questions ask_question: the answer, the SQL, and the rows

Run the server against your deployment:

AUTO_ONTOLOGY_API_URL=http://localhost:3000 \
  uvx --from "git+https://github.com/NVIDIA/auto-ontology.git#subdirectory=mcp" auto-ontology-mcp

Cursor (~/.cursor/mcp.json):

{
  "mcpServers": {
    "auto-ontology": { "url": "http://localhost:3003/mcp" }
  }
}

Claude Desktop (claude_desktop_config.json), bridged with mcp-remote:

{
  "mcpServers": {
    "auto-ontology": {
      "command": "npx",
      "args": ["mcp-remote", "http://localhost:3003/mcp"]
    }
  }
}

Restart the client after editing its config, then sign in when it prompts. Sign-in, configuration, and troubleshooting are in docs/mcp.md.

Agent skills

Three skills teach a coding agent to work with Auto-Ontology. Start at AGENTS.md.

Skill Covers
nvidia-ontology-setup Install, connect sources, compile, prove readiness
nvidia-ontology-management Inspect, model, certify, import/export, and publish
nvidia-ontology-query Ask questions and validate the SQL, rows, and answer

REST API

Ask a question with POST /api/chat/completions on the web app's origin. Mint an API token under the user menu → API Tokens. The response is a server-sent event stream: a result event carries the answer, and data: [DONE] ends the stream.

curl -N http://localhost:3000/api/chat/completions \
  -H "x-api-key: $AUTO_ONTOLOGY_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"question": "How many orders shipped last week?"}'
import json
import os

import requests

response = requests.post(
    "http://localhost:3000/api/chat/completions",
    headers={"x-api-key": os.environ["AUTO_ONTOLOGY_API_TOKEN"]},
    json={"question": "How many orders shipped last week?"},
    stream=True,
    timeout=900,
)
response.raise_for_status()

for line in response.iter_lines(decode_unicode=True):
    if not line or not line.startswith("data:"):
        continue
    payload = line.removeprefix("data:").strip()
    if payload == "[DONE]":
        break
    event = json.loads(payload)
    if event["type"] == "result":
        print(event["answer"]["response"])
        print(event["answer"]["sql_code"])
    elif event["type"] == "error":
        raise RuntimeError(event["message"])

Event types, multi-turn conversations, and the gateway trust boundary are in docs/conversation-api.md. Every other operation is in the OpenAPI spec.

Connectors, models, and predictions

Sources

Auto-Ontology connects to ten engines:

  • PostgreSQL
  • MySQL
  • Databricks
  • Snowflake
  • ClickHouse
  • Trino
  • Apache Kyuubi
  • HeavyDB
  • DuckDB
  • SQLite

Add connections under Settings → Connections, or list them in CONNECTION_STRINGS. DuckDB and SQLite are connection-string only. See docs/connections.md for URL schemes, scoping, and credential storage.

Models

Auto-Ontology uses four model roles. With an nvapi- key, each defaults to an NVIDIA NIM on build.nvidia.com:

Role Default model What it does
REASONING nvidia/nemotron-3.5-lightning-30b-a3b Builds the ontology (terms, relationships, SQL attributes), writes each answer's SQL and explanation, and grades answerability
NON_REASONING nvidia/nemotron-3.5-lightning-30b-a3b Runs the agent's faster steps: question intent, entity extraction, candidate selection, and SQL checks and repair
EMBED nvidia/nemotron-3.5-embed-1b Indexes tables, columns, terms, and SQL attributes in pgvector, and matches each question to them
RERANK nvidia/nemotron-3.5-rerank-8b Ranks candidate tables when compilation builds bridge-table SQL attributes

To use self-hosted NIM or any OpenAI-compatible endpoint, set <ROLE>_ENDPOINT, <ROLE>_API_KEY, and <ROLE>_MODEL. Any field you leave unset falls back to DEFAULT_MODELS_<FIELD>, so the simplest setup fills in DEFAULT_MODELS_* and overrides only what differs. Use models that support structured output, and keep the embedding model the same for ingestion and queries. .env.example documents every variable.

Predictions

Set KUMO_RFM_API_KEY and the agent routes predictive questions to KumoRFM. KumoRFM is a hosted service: to answer, the agent uploads the connected tables to it, capped by KUMO_MAX_TABLES (20 by default) and KUMO_MAX_ROWS_PER_TABLE (unlimited unless set). Review what that sends, and complete your organization's data review, before you enable it.

Integrate with us

To integrate an agent platform, application, or storage provider with Auto-Ontology, open an integration request.

The Auto-Ontology team maintains the code and doesn't accept external pull requests. Integration requests and bug reports are welcome as issues. Report security vulnerabilities through SECURITY.md. Maintainer workflow is in CONTRIBUTING.md.

Reference

Topic Doc
Kubernetes deployment with Helm DEPLOYMENT.md
Connections, scoping, and Vault docs/connections.md
Authentication, SSO, and API tokens docs/authentication.md
Conversation API docs/conversation-api.md
MCP server docs/mcp.md
REST API docs/openapi/auto-ontology-api.json

License

Auto-Ontology is licensed under the Apache License, Version 2.0. SPDX identifier: Apache-2.0.

Each NVIDIA-authored source file in this repository carries an SPDX header of the form:

SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES.
All rights reserved.
SPDX-License-Identifier: Apache-2.0

Third-party open-source components used by Auto-Ontology are enumerated, with their upstream licenses and project URLs, in THIRD_PARTY_NOTICES.md. Components added by the container images are listed separately in CONTAINER_THIRD_PARTY_NOTICES.md.

Notice and Disclaimer

NOTICE AND DISCLAIMER: This software automatically retrieves, accesses or interacts with external materials. Those retrieved materials are not distributed with this software and are governed solely by separate terms, conditions and licenses. You are solely responsible for finding, reviewing and complying with all applicable terms, conditions, and licenses, and for verifying the security, integrity and suitability of any retrieved materials for your specific use case. This software is provided "AS IS", without warranty of any kind. The author makes no representations or warranties regarding any retrieved materials, and assumes no liability for any losses, damages, liabilities or legal consequences from your use or inability to use this software or any retrieved materials. Use this software and the retrieved materials at your own risk.

External materials Auto-Ontology interacts with at run time:

  • Model endpoints you configure, by default the NVIDIA API catalog (integrate.api.nvidia.com, ai.api.nvidia.com), under each provider's and model's terms.
  • The KumoRFM service, only when KUMO_RFM_API_KEY is set, under Kumo's terms.
  • Your source databases, under your agreements for those systems.

Security

Report security vulnerabilities as described in SECURITY.md.

View on GitHub

Recent activity

commits and pull requests

Code frequency

additions and deletions
+140.3K-140.3KWeek of 2026-04-05: +11,341 linesWeek of 2026-04-05: -1 linesWeek of 2026-04-12: +17,686 linesWeek of 2026-04-12: -11,380 linesWeek of 2026-04-19: +15,826 linesWeek of 2026-04-19: -10,193 linesWeek of 2026-04-26: +14,760 linesWeek of 2026-04-26: -21,066 linesWeek of 2026-05-03: +114,126 linesWeek of 2026-05-03: -804 linesWeek of 2026-05-10: +8,305 linesWeek of 2026-05-10: -120,473 linesWeek of 2026-05-17: +3,683 linesWeek of 2026-05-17: -1,813 linesWeek of 2026-05-24: +5,794 linesWeek of 2026-05-24: -2,536 linesWeek of 2026-05-31: +3,481 linesWeek of 2026-05-31: -1,618 linesWeek of 2026-06-07: +10,023 linesWeek of 2026-06-07: -5,696 linesWeek of 2026-06-14: +2,531 linesWeek of 2026-06-14: -1,764 linesWeek of 2026-06-21: +11,885 linesWeek of 2026-06-21: -2,628 linesWeek of 2026-06-28: +10,468 linesWeek of 2026-06-28: -7,589 linesWeek of 2026-07-05: +8,154 linesWeek of 2026-07-05: -1,570 linesWeek of 2026-07-12: +15,359 linesWeek of 2026-07-12: -5,702 linesWeek of 2026-07-19: +8,552 linesWeek of 2026-07-19: -5,527 linesWeek of 2026-07-26: +12,707 linesWeek of 2026-07-26: -2,917 linesWeek of 2026-08-02: +10,403 linesWeek of 2026-08-02: -4,820 linesWeek of 2026-08-09: +39,195 linesWeek of 2026-08-09: -2,615 linesWeek of 2026-08-16: +25,951 linesWeek of 2026-08-16: -16,602 linesWeek of 2026-08-23: +11,551 linesWeek of 2026-08-23: -4,058 linesWeek of 2026-08-30: +115,671 linesWeek of 2026-08-30: -48,149 linesWeek of 2026-09-06: +29,771 linesWeek of 2026-09-06: -3,816 linesWeek of 2026-09-13: +4,801 linesWeek of 2026-09-13: -1,727 linesWeek of 2026-09-20: +140,339 linesWeek of 2026-09-20: -132,774 linesWeek of 2026-09-27: +17,529 linesWeek of 2026-09-27: -3,253 linesWeek of 2026-10-04: +12,810 linesWeek of 2026-10-04: -1,871 linesWeek of 2026-10-11: +13,232 linesWeek of 2026-10-11: -1,731 linesWeek of 2026-10-18: +4,818 linesWeek of 2026-10-18: -2,827 linesWeek of 2026-10-25: +1,817 linesWeek of 2026-10-25: -483 linesWeek of 2026-11-01: +1,435 linesWeek of 2026-11-01: -410 linesApr 5, 2026Nov 1, 2026
+704K lines added, -428.4K removed over the last year.

Commits per week

last 52 weeks
800Week of 2025-11-09: 0 commitsWeek of 2025-11-16: 0 commitsWeek of 2025-11-23: 0 commitsWeek of 2025-11-30: 0 commitsWeek of 2025-12-07: 0 commitsWeek of 2025-12-14: 0 commitsWeek of 2025-12-21: 0 commitsWeek of 2025-12-28: 0 commitsWeek of 2026-01-04: 0 commitsWeek of 2026-01-11: 0 commitsWeek of 2026-01-18: 0 commitsWeek of 2026-01-25: 0 commitsWeek of 2026-02-01: 0 commitsWeek of 2026-02-08: 0 commitsWeek of 2026-02-15: 0 commitsWeek of 2026-02-22: 0 commitsWeek of 2026-03-01: 0 commitsWeek of 2026-03-08: 0 commitsWeek of 2026-03-15: 0 commitsWeek of 2026-03-22: 0 commitsWeek of 2026-03-29: 0 commitsWeek of 2026-04-05: 2 commitsWeek of 2026-04-12: 50 commitsWeek of 2026-04-19: 39 commitsWeek of 2026-04-26: 35 commitsWeek of 2026-05-03: 8 commitsWeek of 2026-05-10: 31 commitsWeek of 2026-05-17: 23 commitsWeek of 2026-05-24: 35 commitsWeek of 2026-05-31: 21 commitsWeek of 2026-06-07: 80 commitsWeek of 2026-06-14: 42 commitsWeek of 2026-06-21: 71 commitsWeek of 2026-06-28: 43 commitsWeek of 2026-07-05: 47 commitsWeek of 2026-07-12: 57 commitsWeek of 2026-07-19: 33 commitsWeek of 2026-07-26: 53 commitsWeek of 2026-08-02: 54 commitsWeek of 2026-08-09: 29 commitsWeek of 2026-08-16: 23 commitsWeek of 2026-08-23: 49 commitsWeek of 2026-08-30: 24 commitsWeek of 2026-09-06: 45 commitsWeek of 2026-09-13: 23 commitsWeek of 2026-09-20: 17 commitsWeek of 2026-09-27: 54 commitsWeek of 2026-10-04: 44 commitsWeek of 2026-10-11: 37 commitsWeek of 2026-10-18: 11 commitsWeek of 2026-10-25: 16 commitsWeek of 2026-11-01: 11 commitsNov 9, 2025Nov 1, 2026
1.1K commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 3 commitsSun 1:00 — 2 commitsSun 2:00 — 0 commitsSun 3:00 — 1 commitsSun 4:00 — 0 commitsSun 5:00 — 0 commitsSun 6:00 — 0 commitsSun 7:00 — 0 commitsSun 8:00 — 1 commitsSun 9:00 — 6 commitsSun 10:00 — 10 commitsSun 11:00 — 25 commitsSun 12:00 — 15 commitsSun 13:00 — 26 commitsSun 14:00 — 27 commitsSun 15:00 — 19 commitsSun 16:00 — 18 commitsSun 17:00 — 3 commitsSun 18:00 — 2 commitsSun 19:00 — 1 commitsSun 20:00 — 1 commitsSun 21:00 — 5 commitsSun 22:00 — 2 commitsSun 23:00 — 3 commitsMon 0:00 — 0 commitsMon 1:00 — 0 commitsMon 2:00 — 0 commitsMon 3:00 — 1 commitsMon 4:00 — 0 commitsMon 5:00 — 0 commitsMon 6:00 — 0 commitsMon 7:00 — 0 commitsMon 8:00 — 2 commitsMon 9:00 — 9 commitsMon 10:00 — 20 commitsMon 11:00 — 40 commitsMon 12:00 — 18 commitsMon 13:00 — 21 commitsMon 14:00 — 38 commitsMon 15:00 — 46 commitsMon 16:00 — 11 commitsMon 17:00 — 4 commitsMon 18:00 — 1 commitsMon 19:00 — 2 commitsMon 20:00 — 1 commitsMon 21:00 — 5 commitsMon 22:00 — 1 commitsMon 23:00 — 3 commitsTue 0:00 — 0 commitsTue 1:00 — 6 commitsTue 2:00 — 0 commitsTue 3:00 — 0 commitsTue 4:00 — 1 commitsTue 5:00 — 0 commitsTue 6:00 — 1 commitsTue 7:00 — 1 commitsTue 8:00 — 6 commitsTue 9:00 — 13 commitsTue 10:00 — 16 commitsTue 11:00 — 32 commitsTue 12:00 — 24 commitsTue 13:00 — 27 commitsTue 14:00 — 26 commitsTue 15:00 — 29 commitsTue 16:00 — 24 commitsTue 17:00 — 13 commitsTue 18:00 — 6 commitsTue 19:00 — 2 commitsTue 20:00 — 2 commitsTue 21:00 — 3 commitsTue 22:00 — 0 commitsTue 23:00 — 1 commitsWed 0:00 — 0 commitsWed 1:00 — 0 commitsWed 2:00 — 0 commitsWed 3:00 — 0 commitsWed 4:00 — 0 commitsWed 5:00 — 1 commitsWed 6:00 — 0 commitsWed 7:00 — 0 commitsWed 8:00 — 3 commitsWed 9:00 — 9 commitsWed 10:00 — 30 commitsWed 11:00 — 35 commitsWed 12:00 — 27 commitsWed 13:00 — 25 commitsWed 14:00 — 32 commitsWed 15:00 — 30 commitsWed 16:00 — 13 commitsWed 17:00 — 6 commitsWed 18:00 — 1 commitsWed 19:00 — 2 commitsWed 20:00 — 2 commitsWed 21:00 — 2 commitsWed 22:00 — 1 commitsWed 23:00 — 0 commitsThu 0:00 — 2 commitsThu 1:00 — 0 commitsThu 2:00 — 0 commitsThu 3:00 — 0 commitsThu 4:00 — 0 commitsThu 5:00 — 0 commitsThu 6:00 — 0 commitsThu 7:00 — 0 commitsThu 8:00 — 1 commitsThu 9:00 — 11 commitsThu 10:00 — 31 commitsThu 11:00 — 43 commitsThu 12:00 — 19 commitsThu 13:00 — 35 commitsThu 14:00 — 35 commitsThu 15:00 — 30 commitsThu 16:00 — 12 commitsThu 17:00 — 3 commitsThu 18:00 — 3 commitsThu 19:00 — 2 commitsThu 20:00 — 3 commitsThu 21:00 — 2 commitsThu 22:00 — 1 commitsThu 23:00 — 0 commitsFri 0:00 — 0 commitsFri 1:00 — 0 commitsFri 2:00 — 0 commitsFri 3:00 — 0 commitsFri 4:00 — 0 commitsFri 5:00 — 0 commitsFri 6:00 — 0 commitsFri 7:00 — 0 commitsFri 8:00 — 0 commitsFri 9:00 — 1 commitsFri 10:00 — 1 commitsFri 11:00 — 2 commitsFri 12:00 — 0 commitsFri 13:00 — 1 commitsFri 14:00 — 1 commitsFri 15:00 — 0 commitsFri 16:00 — 4 commitsFri 17:00 — 1 commitsFri 18:00 — 0 commitsFri 19:00 — 1 commitsFri 20:00 — 0 commitsFri 21:00 — 1 commitsFri 22:00 — 0 commitsFri 23:00 — 0 commitsSat 0:00 — 2 commitsSat 1:00 — 0 commitsSat 2:00 — 0 commitsSat 3:00 — 0 commitsSat 4:00 — 0 commitsSat 5:00 — 0 commitsSat 6:00 — 0 commitsSat 7:00 — 0 commitsSat 8:00 — 0 commitsSat 9:00 — 0 commitsSat 10:00 — 0 commitsSat 11:00 — 1 commitsSat 12:00 — 0 commitsSat 13:00 — 3 commitsSat 14:00 — 0 commitsSat 15:00 — 0 commitsSat 16:00 — 0 commitsSat 17:00 — 0 commitsSat 18:00 — 1 commitsSat 19:00 — 5 commitsSat 20:00 — 2 commitsSat 21:00 — 2 commitsSat 22:00 — 1 commitsSat 23:00 — 0 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.
DateListRankStars gained
Nov 5, 2026daily#1+2,707
Nov 4, 2026daily#1+2,053