# RNIT Vanna - Enhanced SQL Generation
[](https://www.python.org/downloads/)
[](https://opensource.org/licenses/MIT)
RNIT Vanna is an enhanced wrapper around the official [Vanna](https://vanna.ai) 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
```bash
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)
```python
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
```python
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
```python
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
```python
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
```bash
# .env file
OPENAI_API_KEY=your_openai_api_key_here
RNIT_VANNA_VERBOSE=true # Optional: Enable verbose logging
```
## Advanced Usage
### Custom Configuration
```python
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
```python
# 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
```python
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](https://vanna.ai) library. All core SQL generation capabilities come from Vanna.
Raw data
{
"_id": null,
"home_page": "https://github.com/rnit/rnit-vanna",
"name": "rnit-vanna",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": "sql, nlp, gpt, openai, database, query, natural-language, vanna, ai",
"author": "RNIT",
"author_email": "RNIT <aryanrathore040@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/ce/a9/723f532c6eb7c4e86eb21a108c197ffa0545accfe2e9d068172a6cb169f1/rnit_vanna-1.0.1.tar.gz",
"platform": null,
"description": "# RNIT Vanna - Enhanced SQL Generation\r\n\r\n[](https://www.python.org/downloads/)\r\n[](https://opensource.org/licenses/MIT)\r\n\r\nRNIT Vanna is an enhanced wrapper around the official [Vanna](https://vanna.ai) library that provides additional utilities while always using the latest Vanna version.\r\n\r\n## Key Features\r\n\r\n\u2728 **Always Up-to-Date**: Automatically uses the latest official Vanna release\r\n\ud83d\udd27 **Enhanced Utilities**: Additional tools for database inspection and training generation\r\n\ud83d\ude80 **Quick Start**: Pre-configured classes with sensible defaults\r\n\ud83d\udce6 **100% Compatible**: Works exactly like Vanna, but with extras\r\n\ud83c\udfaf **Smart Defaults**: Optimized settings for SQL generation\r\n\r\n## Installation\r\n\r\n```bash\r\npip install rnit-vanna\r\n```\r\n\r\nThis automatically installs the latest Vanna with all required dependencies.\r\n\r\n## Quick Start\r\n\r\n### Option 1: Drop-in Replacement (Works exactly like Vanna)\r\n\r\n```python\r\nfrom rnit_vanna import OpenAI_Chat, ChromaDB_VectorStore\r\n\r\nclass MyVanna(ChromaDB_VectorStore, OpenAI_Chat):\r\n def __init__(self, config=None):\r\n ChromaDB_VectorStore.__init__(self, config=config)\r\n OpenAI_Chat.__init__(self, config=config)\r\n\r\nvn = MyVanna(config={'api_key': 'your-openai-key'})\r\nvn.connect_to_sqlite('my_database.sqlite')\r\nvn.train(ddl=\"CREATE TABLE users (id INT, name TEXT)\")\r\nsql = vn.generate_sql(\"Show all users\")\r\n```\r\n\r\n### Option 2: Use RNIT Enhanced Features\r\n\r\n```python\r\nfrom rnit_vanna import RNITVanna, VannaQuickStart\r\n\r\n# Quick setup with auto-training\r\nvn = VannaQuickStart.for_sqlite('my_database.sqlite', auto_train=True)\r\n\r\n# Or use RNITVanna with auto API key detection\r\nvn = RNITVanna() # Reads OPENAI_API_KEY from environment\r\nvn.connect_to_sqlite('my_database.sqlite')\r\n\r\n# Batch training\r\nvn.batch_train({\r\n 'ddl': [\"CREATE TABLE users ...\", \"CREATE TABLE orders ...\"],\r\n 'queries': [\r\n {\"question\": \"Show all users\", \"sql\": \"SELECT * FROM users\"},\r\n {\"question\": \"Count orders\", \"sql\": \"SELECT COUNT(*) FROM orders\"}\r\n ]\r\n})\r\n```\r\n\r\n### Option 3: Database Inspection and Auto-Training\r\n\r\n```python\r\nfrom rnit_vanna import DatabaseInspector, TrainingGenerator, RNITVanna\r\n\r\n# Inspect your database\r\ninspector = DatabaseInspector()\r\ndb_info = inspector.inspect_sqlite('my_database.sqlite')\r\nprint(inspector.generate_summary(db_info))\r\n\r\n# Generate training queries automatically\r\ngenerator = TrainingGenerator()\r\nfor table_name, info in db_info['tables'].items():\r\n queries = generator.generate_basic_queries(table_name, info['columns'])\r\n # Now you have training queries for each table!\r\n\r\n# Train Vanna with generated queries\r\nvn = RNITVanna()\r\nvn.connect_to_sqlite('my_database.sqlite')\r\nfor query in queries:\r\n vn.train(question=query['question'], sql=query['sql'])\r\n```\r\n\r\n## Enhanced Features\r\n\r\n### \ud83c\udfaf RNITVanna Class\r\n- Auto-detects OpenAI API key from environment\r\n- Optimized defaults (gpt-4o-mini, low temperature for consistent SQL)\r\n- Training history tracking\r\n- Batch training support\r\n- Test accuracy methods\r\n\r\n### \ud83d\ude80 VannaQuickStart\r\n- `for_sqlite()` - Auto-setup and train from SQLite\r\n- `for_postgres()` - Quick PostgreSQL setup\r\n- `for_mysql()` - Quick MySQL setup\r\n- `create_sample_project()` - Generate complete project structure\r\n\r\n### \ud83d\udd0d DatabaseInspector\r\n- Inspect database structure\r\n- Extract relationships and foreign keys\r\n- Generate human-readable summaries\r\n- Count rows and analyze tables\r\n\r\n### \ud83c\udf93 TrainingGenerator\r\n- Auto-generate training queries from schema\r\n- Create JOIN queries from relationships\r\n- Generate aggregation queries for numeric columns\r\n- Save training sets to JSON\r\n\r\n### \u26a1 QueryOptimizer\r\n- Validate SQL against database\r\n- Get execution plans\r\n- Suggest indexes for performance\r\n- Format SQL for readability\r\n\r\n## Complete Example\r\n\r\n```python\r\nfrom rnit_vanna import VannaQuickStart\r\n\r\n# Create a complete sample project\r\nVannaQuickStart.create_sample_project('my_sql_assistant', db_type='sqlite')\r\n\r\n# This creates:\r\n# my_sql_assistant/\r\n# \u251c\u2500\u2500 .env.example # Environment variables template\r\n# \u251c\u2500\u2500 main.py # Starter code\r\n# \u251c\u2500\u2500 requirements.txt # Dependencies\r\n# \u2514\u2500\u2500 README.md # Documentation\r\n```\r\n\r\n## Why Use RNIT Vanna?\r\n\r\n| Feature | Official Vanna | RNIT Vanna |\r\n|---------|---------------|------------|\r\n| Latest Vanna version | \u2705 | \u2705 Automatic |\r\n| Basic SQL generation | \u2705 | \u2705 |\r\n| Auto API key detection | \u274c | \u2705 |\r\n| Database inspection | \u274c | \u2705 |\r\n| Training generation | \u274c | \u2705 |\r\n| Batch training | \u274c | \u2705 |\r\n| Quick start utilities | \u274c | \u2705 |\r\n| Project scaffolding | \u274c | \u2705 |\r\n\r\n## Environment Variables\r\n\r\n```bash\r\n# .env file\r\nOPENAI_API_KEY=your_openai_api_key_here\r\nRNIT_VANNA_VERBOSE=true # Optional: Enable verbose logging\r\n```\r\n\r\n## Advanced Usage\r\n\r\n### Custom Configuration\r\n\r\n```python\r\nvn = RNITVanna(config={\r\n 'model': 'gpt-4', # Use GPT-4 instead of default\r\n 'temperature': 0.5, # Higher creativity\r\n 'max_tokens': 1000, # Longer responses\r\n})\r\n```\r\n\r\n### Training from Files\r\n\r\n```python\r\n# Train from JSON file\r\nvn.train_from_queries_file('training_queries.json')\r\n\r\n# Train from folder of DDL files\r\nvn.train_from_ddl_folder('schema/')\r\n```\r\n\r\n### Testing Accuracy\r\n\r\n```python\r\ntest_queries = [\r\n {\"question\": \"Show all users\", \"expected_sql\": \"SELECT * FROM users\"},\r\n {\"question\": \"Count orders\", \"expected_sql\": \"SELECT COUNT(*) FROM orders\"}\r\n]\r\n\r\nresults = vn.test_accuracy(test_queries)\r\nprint(f\"Accuracy: {results['accuracy']:.2%}\")\r\n```\r\n\r\n## Compatibility\r\n\r\n- Python 3.7+\r\n- Works with all databases supported by Vanna (SQLite, PostgreSQL, MySQL, Snowflake, etc.)\r\n- Compatible with all Vanna versions >= 0.5.0\r\n\r\n## License\r\n\r\nMIT License - see LICENSE file for details.\r\n\r\n## Contributing\r\n\r\nContributions are welcome! Please feel free to submit a Pull Request.\r\n\r\n## Support\r\n\r\nFor issues, questions, or suggestions, please open an issue on GitHub.\r\n\r\n## Acknowledgments\r\n\r\nThis project wraps the excellent [Vanna.AI](https://vanna.ai) library. All core SQL generation capabilities come from Vanna.\r\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Enhanced wrapper for Vanna SQL generation library with custom utilities",
"version": "1.0.1",
"project_urls": {
"Bug Tracker": "https://github.com/rnit/rnit-vanna/issues",
"Documentation": "https://github.com/rnit/rnit-vanna/wiki",
"Homepage": "https://github.com/rnit/rnit-vanna",
"Repository": "https://github.com/rnit/rnit-vanna"
},
"split_keywords": [
"sql",
" nlp",
" gpt",
" openai",
" database",
" query",
" natural-language",
" vanna",
" ai"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "df90452ae277fb9da126d1a42c843847d290063414300c463636e247392ae415",
"md5": "33ce0d39494c31ff02cd079621be2f08",
"sha256": "db70e5c39b35d6b55e1079a270d9688f2344c9973604305a8f2bb4f55b83c595"
},
"downloads": -1,
"filename": "rnit_vanna-1.0.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "33ce0d39494c31ff02cd079621be2f08",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 12875,
"upload_time": "2025-09-15T12:01:56",
"upload_time_iso_8601": "2025-09-15T12:01:56.443280Z",
"url": "https://files.pythonhosted.org/packages/df/90/452ae277fb9da126d1a42c843847d290063414300c463636e247392ae415/rnit_vanna-1.0.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "cea9723f532c6eb7c4e86eb21a108c197ffa0545accfe2e9d068172a6cb169f1",
"md5": "57afdaded52a67e92f85b894a933187b",
"sha256": "a9820aefd935a092cba0857b23f60c1cbe1ce36d0724b03dafffd9e5e6db30fd"
},
"downloads": -1,
"filename": "rnit_vanna-1.0.1.tar.gz",
"has_sig": false,
"md5_digest": "57afdaded52a67e92f85b894a933187b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 14942,
"upload_time": "2025-09-15T12:01:57",
"upload_time_iso_8601": "2025-09-15T12:01:57.595107Z",
"url": "https://files.pythonhosted.org/packages/ce/a9/723f532c6eb7c4e86eb21a108c197ffa0545accfe2e9d068172a6cb169f1/rnit_vanna-1.0.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-09-15 12:01:57",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "rnit",
"github_project": "rnit-vanna",
"github_not_found": true,
"lcname": "rnit-vanna"
}