vanna-ai/vanna

โ˜… 23,815โ‘‚ 0

๐Ÿค– Chat with your SQL database ๐Ÿ“Š. Accurate Text-to-SQL Generation via LLMs using Agentic Retrieval ๐Ÿ”„.

About vanna-ai/vanna

vanna-ai/vanna is an open-source project on GitHub, mainly written in Python. ๐Ÿค– Chat with your SQL database ๐Ÿ“Š. Accurate Text-to-SQL Generation via LLMs using Agentic Retrieval ๐Ÿ”„. It currently holds 23,815 stars and 0 forks with 0 open issues, and was last pushed on an unknown date (repository created unknown).

Project Overview

AI Homed tracks it on the AI Models & LLM Tools board.

GitHub Repository Details

Repository vanna-ai/vanna ยท default branch - ยท size 0 KB ยท watchers 0 ยท source: GitHub REST API and repository README

README

Vanna 2.0: Turn Questions into Data Insights

Natural language โ†’ SQL โ†’ Answers. Now with enterprise security and user-aware permissions.

Python License Code style: black

https://github.com/user-attachments/assets/476cd421-d0b0-46af-8b29-0f40c73d6d83

Vanna2 Demo

---

What's New in 2.0

๐Ÿ” User-Aware at Every Layer โ€” Queries automatically filtered per user permissions

๐ŸŽจ Modern Web Interface โ€” Beautiful pre-built `` component

โšก Streaming Responses โ€” Real-time tables, charts, and progress updates

๐Ÿ”’ Enterprise Security โ€” Row-level security, audit logs, rate limiting

๐Ÿ”„ Production-Ready โ€” FastAPI integration, observability, lifecycle hooks

Upgrading from 0.x? See the Migration Guide | What changed?

---

Get Started

Try it with Sample Data

Quickstart

Configure

Configure

Web Component


Uses your existing cookies/JWTs. Works with React, Vue, or plain HTML.

---

What You Get

Ask a question in natural language and get back:

1. Streaming Progress Updates

2. SQL Code Block (By default only shown to "admin" users)

3. Interactive Data Table

4. Charts (Plotly visualizations)

5. Natural Language Summary

All streamed in real-time to your web component.

---

Why Vanna 2.0?

โœ… Get Started Instantly

โœ… Enterprise-Ready Security

User-aware at every layer โ€” Identity flows through system prompts, tool execution, and SQL filtering Row-level security โ€” Queries automatically filtered per user permissions Audit logs โ€” Every query tracked per user for compliance Rate limiting โ€” Per-user quotas via lifecycle hooks

โœ… Beautiful Web UI Included

Pre-built `` component โ€” No need to build your own chat interface Streaming tables & charts โ€” Rich components, not just text Responsive & customizable โ€” Works on mobile, desktop, light/dark themes Framework-agnostic โ€” React, Vue, plain HTML

โœ… Works With Your Stack

Any LLM: OpenAI, Anthropic, Ollama, Azure, Google Gemini, AWS Bedrock, Mistral, Others Any Database: PostgreSQL, MySQL, Snowflake, BigQuery, Redshift, SQLite, Oracle, SQL Server, DuckDB, ClickHouse, Others Your Auth System: Bring your own โ€” cookies, JWTs, OAuth tokens Your Framework: FastAPI, Flask

โœ… Extensible But Opinionated

Custom tools โ€” Extend the Tool base class Lifecycle hooks โ€” Quota checking, logging, content filtering LLM middlewares โ€” Caching, prompt engineering Observability โ€” Built-in tracing and metrics

---

Architecture

Vanna2 Diagram

---

How It Works

sequenceDiagram
    participant U as ๐Ÿ‘ค User
    participant W as ๐ŸŒ 
    participant S as ๐Ÿ Your Server
    participant A as ๐Ÿค– Agent
    participant T as ๐Ÿงฐ Tools

U->>W: "Show Q4 sales" W->>S: POST /api/vanna/v2/chat_sse (with auth) S->>A: User(id=alice, groups=[read_sales]) A->>T: Execute SQL tool (user-aware) T->>T: Apply row-level security T->>A: Filtered results A->>W: Stream: Table โ†’ Chart โ†’ Summary W->>U: Display beautiful UI

Key Concepts:

1. User Resolver โ€” You define how to extract user identity from requests (cookies, JWTs, etc.) 2. User-Aware Tools โ€” Tools automatically check permissions based on user's group memberships 3. Streaming Components โ€” Backend streams structured UI components (tables, charts) to frontend 4. Built-in Web UI โ€” Pre-built `` component renders everything beautifully

---

Production Setup with Your Auth

Here's a complete example integrating Vanna with your existing FastAPI app and authentication:

from fastapi import FastAPI
from vanna import Agent
from vanna.servers.fastapi.routes import register_chat_routes
from vanna.servers.base import ChatHandler
from vanna.core.user import UserResolver, User, RequestContext
from vanna.integrations.anthropic import AnthropicLlmService
from vanna.tools import RunSqlTool
from vanna.integrations.sqlite import SqliteRunner
from vanna.core.registry import ToolRegistry

Your existing FastAPI app

app = FastAPI()

1. Define your user resolver (using YOUR auth system)

class MyUserResolver(UserResolver): async def resolve_user(self, request_context: RequestContext) -> User: # Extract from cookies, JWTs, or session token = request_context.get_header('Authorization') user_data = self.decode_jwt(token) # Your existing logic

return User( id=user_data['id'], email=user_data['email'], group_memberships=user_data['groups'] # Used for permissions )

2. Set up agent with tools

llm = AnthropicLlmService(model="claude-sonnet-4-5") tools = ToolRegistry() tools.register(RunSqlTool(sql_runner=SqliteRunner("./data.db")))

agent = Agent( llm_service=llm, tool_registry=tools, user_resolver=MyUserResolver() )

3. Add Vanna routes to your app

chat_handler = ChatHandler(agent) register_chat_routes(app, chat_handler)

Now you have:

- POST /api/vanna/v2/chat_sse (streaming endpoint)

- GET / (optional web UI)

Then in your frontend:


See Full Documentation for custom tools, lifecycle hooks, and advanced configuration

---

Custom Tools

Extend Vanna with custom tools for your specific use case:

from vanna.core.tool import Tool, ToolContext, ToolResult
from pydantic import BaseModel, Field
from typing import Type

class EmailArgs(BaseModel): recipient: str = Field(description="Email recipient") subject: str = Field(description="Email subject")

class EmailTool(Tool[EmailArgs]): @property def name(self) -> str: return "send_email"

@property def access_groups(self) -> list[str]: return ["send_email"] # Permission check

def get_args_schema(self) -> Type[EmailArgs]: return EmailArgs

async def execute(self, context: ToolContext, args: EmailArgs) -> ToolResult: user = context.user # Automatically injected

# Your business logic await self.email_service.send( from_email=user.email, to=args.recipient, subject=args.subject )

return ToolResult(success=True, result_for_llm=f"Email sent to {args.recipient}")

Register your tool

tools.register(EmailTool())

---

Advanced Features

Vanna 2.0 includes powerful enterprise features for production use:

Lifecycle Hooks โ€” Add quota checking, custom logging, content filtering at key points in the request lifecycle

LLM Middlewares โ€” Implement caching, prompt engineering, or cost tracking around LLM calls

Conversation Storage โ€” Persist and retrieve conversation history per user

Observability โ€” Built-in tracing and metrics integration

Context Enrichers โ€” Add RAG, memory, or documentation to enhance agent responses

Agent Configuration โ€” Control streaming, temperature, max iterations, and more

---

Use Cases

Vanna is ideal for:

---

Community & Support

---

Migration Notes

Upgrading from Vanna 0.x?

Vanna 2.0 is a complete rewrite focused on user-aware agents and production deployments. Key changes:

Migration path:

1. Quick wrap โ€” Use LegacyVannaAdapter to wrap your existing Vanna 0.x instance and get the new web UI immediately 2. Gradual migration โ€” Incrementally move to the new Agent API and tools

See the complete Migration Guide for step-by-step instructions.

---

License

MIT License โ€” See LICENSE for details.

---

Built with โค๏ธ by the Vanna team | Website | Docs | Discussions

GitHub Stars & Activity

23,815Stars
0Forks
0Open issues
PythonLanguage

GitHub Popularity

GitHub stars23,815
Forks0
Open issues0
Primary languagePython
License-
Stars gained today0
Created-
Last pushed-

Trending History

Trending statusnot on today's boards

Related AI Projects

1

huggingface / transformers

Pythonโ˜… 166,453โ‘‚ 0
โ†’
2

TauricResearch / TradingAgents

Pythonโ˜… 107,797โ‘‚ 0
โ†’
3

PaddlePaddle / PaddleOCR

Pythonโ˜… 89,891โ‘‚ 0
โ†’
4

unslothai / unsloth

Pythonโ˜… 76,497โ‘‚ 0
โ†’
5

hiyouga / LlamaFactory

Pythonโ˜… 74,932โ‘‚ 0
โ†’
6

headroomlabs-ai / headroom

Pythonโ˜… 73,265โ‘‚ 0
โ†’
7

ZhuLinsen / daily_stock_analysis

Pythonโ˜… 65,382โ‘‚ 0
โ†’
8

BerriAI / litellm

Pythonโ˜… 59,247โ‘‚ 0
โ†’

More AI Rankings