Enhanced wrapper for Vanna SQL generation library with custom utilities
Project description
RNIT Vanna - Enhanced SQL Generation
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 SQLitefor_postgres()- Quick PostgreSQL setupfor_mysql()- Quick MySQL setupcreate_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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c16bf5b36661b9c0a67e57357af975de512429dc3bea4782f5f378489cd3c6ca
|
|
| MD5 |
dec35133d212358a92c26f4f2529356a
|
|
| BLAKE2b-256 |
049dad83ffaa7bd31e2ef63dd38a8de64cfd8793985d5a8a0349e275c9be7240
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
46536a2ad142cc286fcf960a9d9611c6e03742d4e4f2655e754c0fbd33dc559f
|
|
| MD5 |
46f8461ad9cd83a8f10175bdd91956bd
|
|
| BLAKE2b-256 |
ace1c8adfc686bf0aa5501fe247c7543318caecb4296d5d1516b6fbbfc3c7f18
|