auto-ontology README

The project's README from github.com/NVIDIA/auto-ontology. As one markdown file: README.md.

Auto Ontology

Agents can retrieve documents and query databases, but reliability gates agentic analytics: a revenue metric answered faster is worth nothing if the number is wrong. Agents need a context layer that tells them where data lives, what it means, whether to use it, how to use it, where it came from, and what is similar. NVIDIA Auto Ontology is an open library that builds that layer from enterprise metadata, reconciles definitions across systems, and exposes it to any agent harness through MCP, CLI, and API. It complements the semantic models customers already own.

It enables developers to:

Benchmarks

To run a text-to-SQL benchmark such as BIRD, refer to the ontology SQL evaluation repository.

Licensing & contributions. Auto Ontology is distributed under the Apache License 2.0. Third-party open-source components bundled, linked, or otherwise used by this project are listed in THIRD_PARTY_NOTICES.md. This project is currently not accepting external contributions.

Auto Ontology Architecture

Key Features

Software Components

Component Technology Role Default port
Frontend Next.js 16 (React 19, TypeScript, Tailwind CSS 4), Better Auth, Prisma Web UI, authentication, API gateway 3000
Backend FastAPI (Python 3.12+), LangChain Chat / NL-to-SQL, catalog, datasource APIs 3001
Ingestion worker FastAPI (Python 3.12+) Ingests tabular data and writes embeddings 3002
Postgres + pgvector Relational Database App metadata, the catalog and ontology, vector store 5432
HashiCorp Vault Optional Secure storage of connection credentials —

NVIDIA NIM

Auto Ontology uses NVIDIA NIM endpoints for inference — either the hosted NVIDIA API catalog (integrate.api.nvidia.com) or self-hosted NIMs. The defaults in .env.example are:

The endpoints and models are configured via the DEFAULT_MODELS_ENDPOINT, DEFAULT_MODELS_MODEL, EMBED_ENDPOINT, and EMBED_MODEL environment variables and require a DEFAULT_MODELS_API_KEY.

Model triplets

Each model role is configured by a triplet of environment variables — <PREFIX>_ENDPOINT (URL), <PREFIX>_API_KEY, and <PREFIX>_MODEL:

Prefix Role
DEFAULT_MODELS Shared default; every field below falls back to it.
REASONING Main chat / NL-to-SQL model.
NON_REASONING Lighter model used for entity extraction.
EMBED Text-embedding model (must match between ingest and query).
RERANK Reranker used by the retrieval flow.

You can set a full triplet, only some of its fields, or none at all — any field left unset falls back to the matching DEFAULT_MODELS_<FIELD>. So the simplest setup is to fill in DEFAULT_MODELS_* and override per-triplet fields only where they differ (e.g. EMBED_MODEL, NON_REASONING_MODEL). *_API_KEY also falls back to the legacy NVIDIA_API_KEY for backward compatibility.

Deployment

Prerequisites

Installation

Kubernetes

To deploy Auto Ontology on a Kubernetes cluster, see DEPLOYMENT.md.

Local (Docker Compose)

  1. Clone the repository:

    git clone <repo-url> auto_ontology && cd auto_ontology
    
  2. Create your environment file (.env) from the template and fill in the values (Postgres credentials, DEFAULT_MODELS_API_KEY, CONNECTION_STRINGS, etc.). See .env.example for the full list of variables:

    cp .env.example .env
    # edit .env
    

    Note:

    • AUTH_SECRET and APP_URL are required — without them every page fails with a Better Auth "default secret" error.
    • POSTGRES_PORT only changes the host-side port mapping (set it if 5432 is already taken on your machine); containers always reach Postgres on the internal network port.
  3. Build the images and start the stack:

    docker compose up -d --build
    

    This builds the backend (auto_ontology) and frontend (auto-ontology-frontend) images, brings up Postgres and pgAdmin, runs the one-shot frontend-migrate job to sync the database schema, and starts the app (backend, ingestion service, and frontend).

  4. Open the UI at http://localhost:3000 (the backend API is on :3001, pgAdmin on :5050).

    Troubleshooting: if the UI loads without the left navigation panel (or otherwise looks broken after a restart), your browser is holding a stale session cookie — this happens when AUTH_SECRET changes or the database is reset. Clear the site data for localhost:3000 (or delete the better-auth.session_token cookie) and sign in again.

Connections Management

Auto Ontology resolves the source databases it connects to from two sources:

  1. Added through the UI — connections created from within the app. With this option the connection credentials are stored in plaintext in Postgres unless Vault is configured:

    • Without Vault: the full connection object (including the password) is JSON-serialized and stored, unencrypted, on the catalog's database row.
    • With Vault: the credentials are written to Vault, keyed by the database name, and the catalog row stores no credentials (the database name is the lookup key — there is no separate reference field).

    Vault is enabled only when all of VAULT_ADDR, VAULT_NAMESPACE, VAULT_ROLE_ID, and VAULT_SECRET_ID are set (VAULT_AUTH_MOUNT and VAULT_KV_MOUNT are optional overrides). It is off by default; a partial configuration is ignored with a warning and falls back to plaintext storage.

  2. CONNECTION_STRINGS environment variable — a comma-separated list of connection strings supplied at deploy time (e.g. the Helm --set connectionStrings=<CONNECTION-STRINGS> flag). This is a fallback: it is used only when there are no UI-added connections.

Authentication

Auto Ontology Supports SSO for authentication. The Redirect URI should be configured in the IdP as: APP_URL/api/auth/sso/callback

API tokens (scripting)

A browser signs in and gets a session cookie, which a script cannot obtain. For scripts, notebooks, and scheduled jobs, mint an API token instead:

  1. Open the user menu (top right) → API Tokens → New token.
  2. Name it, optionally pick an expiry (default: never), and copy the token. Auto Ontology stores only a SHA-256 hash of it, so it is shown exactly once. Losing it means minting a new one.

Send it as x-api-key on any /api/... call — Authorization: Bearer <token> works too:

curl -H "x-api-key: $AUTO_ONTOLOGY_API_TOKEN" https://auto_ontology.example.com/api/terms
import os
import requests

session = requests.Session()
session.headers["x-api-key"] = os.environ["AUTO_ONTOLOGY_API_TOKEN"]

terms = session.get("https://auto_ontology.example.com/api/terms").json()

answer = session.post(
    "https://auto_ontology.example.com/api/chat/completions",
    json={"question": "How many orders shipped last week?"},
).json()

Things worth knowing:

Agent API conversations

Public clients call the authenticated Next.js gateway at POST /api/chat/completions. The response is an SSE stream containing step, result, or error events, followed by [DONE].

conversation_id is optional:

{
  "question": "What about last month?",
  "conversation_id": "d61d8aa3-d496-4fa7-97ce-4f831c162e7f"
}

For conversational requests, FastAPI loads up to the five most recent completed turns (bounded to 12,000 characters) and rewrites contextual input such as “What about August?” into a standalone question before running the existing text-to-SQL graph. Independent questions are passed through unchanged. Internal agent thoughts, chart payloads, errors, and raw SQL result sets are not reused as context.

Conversation history is scoped to the authenticated Auto Ontology user. Browser and service callers should use the Next.js gateway, which resolves the user and forwards the internal x-auto-ontology-user-id header to FastAPI. The FastAPI port is a trusted internal service boundary: it must not be exposed publicly because that header is not independently verified by FastAPI. A direct FastAPI request without conversation_id remains stateless; a direct request with conversation_id requires the trusted identity header.

The web UI manages the UUID automatically. An API-created conversation can be opened in the UI at /chat?focus=<conversation_id> when it belongs to the signed-in user.

Agent skills

Coding agents: start at AGENTS.md. Skills live in skills/ (nvidia-ontology-setup, nvidia-ontology-management, nvidia-ontology-query). Maintainers keep using CLAUDE.md.

MCP server

Agent harnesses such as Cursor and Claude Desktop can query your data through Auto Ontology's MCP server. See mcp/ to run it and docs/mcp.md for the details.

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:

Material When Terms
NVIDIA-hosted model APIs (build.nvidia.com, integrate.api.nvidia.com) for LLM, embedding, and reranking Chat, ingestion, and semantic compilation, with the default model configuration Terms of the NVIDIA API catalog and of each model
Any other OpenAI-compatible model endpoint you configure (*_ENDPOINT / *_MODEL) Same Terms of that provider and model
KumoRFM predictive-query service Only when KUMO_RFM_API_KEY is set Kumo's terms
Your source databases Ingestion, profiling, and query execution Your agreements for those systems

Contributing

This project is currently not accepting contributions. Issues, pull requests, and patches submitted from outside the Auto Ontology maintainer team will not be reviewed or merged. Security-relevant reports should follow the process described in SECURITY.md. Maintainer workflow is in CONTRIBUTING.md.

auto-ontology (NVIDIA/auto-ontology)

better-auth
Searching Database…

What is this?Auto Ontology is an open-source Python framework from NVIDIA that builds a semantic, graph-based ontology layer over enterprise data (metadata, definitions, lineage) and exposes it to LLM agents via MCP, CLI, and API so natural-language questions turn into verified, provenance-backed SQL answers.
Is this a Python library I import, or a full app I deploy?Both: it's a Python framework, but it ships as a deployable multi-service stack (Next.js frontend, FastAPI backend, ingestion worker, Postgres) that you run via Docker Compose locally or a Helm chart on Kubernetes.
How do I get it running?Run the local stack with Docker Compose (Docker Desktop on macOS/Windows, Docker Engine on Linux); for production use the Helm chart on Kubernetes described in DEPLOYMENT.md.
Do I need an NVIDIA API key to use this?Yes, you need an NVIDIA API key (nvapi-...) for NVIDIA NIM inference used in chat and ingestion, unless you point it at your own self-hosted NIMs or another OpenAI-compatible endpoint.
Any deployment pitfalls I should know about?The FastAPI backend port is a trusted internal boundary and must never be exposed publicly, since it trusts an internal user-id header without independent verification; traffic should always go through the Next.js gateway.
Where do my database connection credentials get stored?If you don't configure HashiCorp Vault, connection credentials including passwords are stored in plaintext, unencrypted, in the Postgres catalog table; configuring Vault moves credentials out of Postgres entirely.
Can coding agents like Cursor or Claude Desktop use this directly?Yes, Auto Ontology ships an MCP server so agent harnesses such as Cursor and Claude Desktop can query your connected data through it.
Which NVIDIA NIM models does it use by default?Out of the box it uses nvidia/nemotron-3-nano-30b-a3b for chat, nvidia/nemotron-3-embed-1b for embeddings, and nvidia/llama-nemotron-rerank-vl-1b-v2 for reranking, all swappable via environment variables.
Does it support multi-turn conversations in the chat API?Yes, you pass a client-generated conversation UUID and FastAPI loads up to the five most recent turns (capped at 12,000 characters) to rewrite follow-up questions like 'What about August?' into standalone ones.
Creator
NVIDIA
Size
21.7 MB
Stars
693
Updated
CommitNov 01
Age
6mo
Commits · 90 Days