Skip to main content

Enhanced wrapper for Vanna SQL generation library with custom utilities

Project description

RNIT Vanna - Enhanced SQL Generation

Python 3.7+ License: MIT

RNIT Vanna is an enhanced wrapper around the official Vanna library that provides additional utilities while always using the latest Vanna version.

Key Features

Always Up-to-Date: Automatically uses the latest official Vanna release 🔧 Enhanced Utilities: Additional tools for database inspection and training generation 🚀 Quick Start: Pre-configured classes with sensible defaults 📦 100% Compatible: Works exactly like Vanna, but with extras 🎯 Smart Defaults: Optimized settings for SQL generation

Installation

pip install rnit-vanna

This automatically installs the latest Vanna with all required dependencies.

Quick Start

Option 1: Drop-in Replacement (Works exactly like Vanna)

from rnit_vanna import OpenAI_Chat, ChromaDB_VectorStore

class MyVanna(ChromaDB_VectorStore, OpenAI_Chat):
    def __init__(self, config=None):
        ChromaDB_VectorStore.__init__(self, config=config)
        OpenAI_Chat.__init__(self, config=config)

vn = MyVanna(config={'api_key': 'your-openai-key'})
vn.connect_to_sqlite('my_database.sqlite')
vn.train(ddl="CREATE TABLE users (id INT, name TEXT)")
sql = vn.generate_sql("Show all users")

Option 2: Use RNIT Enhanced Features

from rnit_vanna import RNITVanna, VannaQuickStart

# Quick setup with auto-training
vn = VannaQuickStart.for_sqlite('my_database.sqlite', auto_train=True)

# Or use RNITVanna with auto API key detection
vn = RNITVanna()  # Reads OPENAI_API_KEY from environment
vn.connect_to_sqlite('my_database.sqlite')

# Batch training
vn.batch_train({
    'ddl': ["CREATE TABLE users ...", "CREATE TABLE orders ..."],
    'queries': [
        {"question": "Show all users", "sql": "SELECT * FROM users"},
        {"question": "Count orders", "sql": "SELECT COUNT(*) FROM orders"}
    ]
})

Option 3: Database Inspection and Auto-Training

from rnit_vanna import DatabaseInspector, TrainingGenerator, RNITVanna

# Inspect your database
inspector = DatabaseInspector()
db_info = inspector.inspect_sqlite('my_database.sqlite')
print(inspector.generate_summary(db_info))

# Generate training queries automatically
generator = TrainingGenerator()
for table_name, info in db_info['tables'].items():
    queries = generator.generate_basic_queries(table_name, info['columns'])
    # Now you have training queries for each table!

# Train Vanna with generated queries
vn = RNITVanna()
vn.connect_to_sqlite('my_database.sqlite')
for query in queries:
    vn.train(question=query['question'], sql=query['sql'])

Enhanced Features

🎯 RNITVanna Class

  • Auto-detects OpenAI API key from environment
  • Optimized defaults (gpt-4o-mini, low temperature for consistent SQL)
  • Training history tracking
  • Batch training support
  • Test accuracy methods

🚀 VannaQuickStart

  • for_sqlite() - Auto-setup and train from SQLite
  • for_postgres() - Quick PostgreSQL setup
  • for_mysql() - Quick MySQL setup
  • create_sample_project() - Generate complete project structure

🔍 DatabaseInspector

  • Inspect database structure
  • Extract relationships and foreign keys
  • Generate human-readable summaries
  • Count rows and analyze tables

🎓 TrainingGenerator

  • Auto-generate training queries from schema
  • Create JOIN queries from relationships
  • Generate aggregation queries for numeric columns
  • Save training sets to JSON

⚡ QueryOptimizer

  • Validate SQL against database
  • Get execution plans
  • Suggest indexes for performance
  • Format SQL for readability

Complete Example

from rnit_vanna import VannaQuickStart

# Create a complete sample project
VannaQuickStart.create_sample_project('my_sql_assistant', db_type='sqlite')

# This creates:
# my_sql_assistant/
#   ├── .env.example       # Environment variables template
#   ├── main.py           # Starter code
#   ├── requirements.txt  # Dependencies
#   └── README.md        # Documentation

Why Use RNIT Vanna?

Feature Official Vanna RNIT Vanna
Latest Vanna version ✅ Automatic
Basic SQL generation
Auto API key detection
Database inspection
Training generation
Batch training
Quick start utilities
Project scaffolding

Environment Variables

# .env file
OPENAI_API_KEY=your_openai_api_key_here
RNIT_VANNA_VERBOSE=true  # Optional: Enable verbose logging

Advanced Usage

Custom Configuration

vn = RNITVanna(config={
    'model': 'gpt-4',        # Use GPT-4 instead of default
    'temperature': 0.5,      # Higher creativity
    'max_tokens': 1000,      # Longer responses
})

Training from Files

# Train from JSON file
vn.train_from_queries_file('training_queries.json')

# Train from folder of DDL files
vn.train_from_ddl_folder('schema/')

Testing Accuracy

test_queries = [
    {"question": "Show all users", "expected_sql": "SELECT * FROM users"},
    {"question": "Count orders", "expected_sql": "SELECT COUNT(*) FROM orders"}
]

results = vn.test_accuracy(test_queries)
print(f"Accuracy: {results['accuracy']:.2%}")

Compatibility

  • Python 3.7+
  • Works with all databases supported by Vanna (SQLite, PostgreSQL, MySQL, Snowflake, etc.)
  • Compatible with all Vanna versions >= 0.5.0

License

MIT License - see LICENSE file for details.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Support

For issues, questions, or suggestions, please open an issue on GitHub.

Acknowledgments

This project wraps the excellent Vanna.AI library. All core SQL generation capabilities come from Vanna.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rnit_vanna-1.0.0.tar.gz (14.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rnit_vanna-1.0.0-py3-none-any.whl (12.9 kB view details)

Uploaded Python 3

File details

Details for the file rnit_vanna-1.0.0.tar.gz.

File metadata

  • Download URL: rnit_vanna-1.0.0.tar.gz
  • Upload date:
  • Size: 14.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.11

File hashes

Hashes for rnit_vanna-1.0.0.tar.gz
Algorithm Hash digest
SHA256 c16bf5b36661b9c0a67e57357af975de512429dc3bea4782f5f378489cd3c6ca
MD5 dec35133d212358a92c26f4f2529356a
BLAKE2b-256 049dad83ffaa7bd31e2ef63dd38a8de64cfd8793985d5a8a0349e275c9be7240

See more details on using hashes here.

File details

Details for the file rnit_vanna-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: rnit_vanna-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 12.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.11

File hashes

Hashes for rnit_vanna-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 46536a2ad142cc286fcf960a9d9611c6e03742d4e4f2655e754c0fbd33dc559f
MD5 46f8461ad9cd83a8f10175bdd91956bd
BLAKE2b-256 ace1c8adfc686bf0aa5501fe247c7543318caecb4296d5d1516b6fbbfc3c7f18

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page