rnit-vanna


Namernit-vanna JSON
Version 1.0.1 PyPI version JSON
download
home_pagehttps://github.com/rnit/rnit-vanna
SummaryEnhanced wrapper for Vanna SQL generation library with custom utilities
upload_time2025-09-15 12:01:57
maintainerNone
docs_urlNone
authorRNIT
requires_python>=3.7
licenseMIT
keywords sql nlp gpt openai database query natural-language vanna ai
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # RNIT Vanna - Enhanced SQL Generation

[![Python 3.7+](https://img.shields.io/badge/python-3.7+-blue.svg)](https://www.python.org/downloads/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](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[![Python 3.7+](https://img.shields.io/badge/python-3.7+-blue.svg)](https://www.python.org/downloads/)\r\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](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"
}
        
Elapsed time: 1.23597s