Natural Language Model Database - Query databases using natural language
Project description
NLMDB: Natural Language & MCP-powered Database
Query your databases using natural language through the Model Context Protocol (MCP) approach. NLMDB provides a simple API for interacting with databases using either OpenAI or Hugging Face models.
✨ Features
- 💬 Query databases using natural language
- 🔄 Support for both OpenAI and Hugging Face models
- 🔒 Enhanced privacy options with local Hugging Face models
- 📊 Automatic schema extraction
- 📝 Multiple output formats: explanatory text or direct data
- 🧩 Simple, intuitive API
🚀 Installation
pip install nlmdb
🏁 Quick Start
Natural Language Explanations Mode
from nlmdb import dbagent
# Initialize the agent with your API key and database path
response = dbagent(
api_key="your-openai-api-key",
db_path="path/to/your/database.db",
query="What tables are in the database and what columns do they have?"
)
print(response["output"])
SQL Agent Mode (New!)
Get direct results without explanations - perfect for data analysis workflows:
from nlmdb import sql_agent
import pandas as pd
# Get results as a pandas DataFrame
df = sql_agent(
api_key="your-openai-api-key",
db_path="path/to/your/database.db",
query="List all customers who made purchases over $1000",
return_type="dataframe" # Options: "dataframe", "dict", or "json"
)
# Now you can directly work with the data
print(df.head())
Using Hugging Face Models
from nlmdb import dbagent_private
# Initialize the agent with your Hugging Face token and model name
response = dbagent_private(
hf_config=("your-huggingface-token", "model-repo-name"),
db_path="path/to/your/database.db",
query="What tables are in the database and what columns do they have?"
)
print(response["output"])
🔒 Privacy and Data Security
NLMDB offers enhanced privacy options through its support for Hugging Face models:
Enhanced Privacy with Hugging Face Models
When using dbagent_private or sql_agent_private with use_local=True, all processing happens locally on your machine, ensuring your database schema and query data never leave your environment:
response = dbagent_private(
hf_config=("your-huggingface-token", "model-repo-name"),
db_path="path/to/your/database.db",
query="What tables are in the database?",
use_local=True # Ensures all processing happens locally
)
Data Security Considerations
-
OpenAI Integration: When using
dbagentwith OpenAI models, database schema and queries are sent to OpenAI's API. While only schema information and not actual data is shared, consider privacy implications. -
Hugging Face Cloud API: Using
dbagent_privatewithoutuse_local=Truesends queries to Hugging Face's Inference API. -
Local Processing: For maximum privacy, use
dbagent_privatewithuse_local=Trueto keep all processing on your machine. -
No Data Storage: NLMDB does not store or log your database contents, queries, or responses.
🔄 Model Comparison
| Feature | OpenAI Models (dbagent/sql_agent) |
Hugging Face Models (dbagent_private/sql_agent_private) |
|---|---|---|
| SQL Generation Quality | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| Privacy | ⭐⭐ | ⭐⭐⭐⭐⭐ (with use_local=True) |
| Cost | 💰💰💰 | 💰 (self-hosted) / 💰💰 (HF API) |
| Offline Usage | ❌ | ✅ (with use_local=True) |
| Setup Complexity | Simple | Moderate |
| Resource Requirements | Minimal (Cloud-based) | High (for local models) |
| Speed | Fast | Varies (depends on hardware) |
| Customizability | Limited | Extensive |
🧩 Advanced Usage
SQL Agent with Different Return Types
# Get results as a dictionary
result_dict = sql_agent(
api_key="your-openai-api-key",
db_path="path/to/your/database.db",
query="Find the total sales by product category",
return_type="dict"
)
# Get results as JSON
json_result = sql_agent(
api_key="your-openai-api-key",
db_path="path/to/your/database.db",
query="Show me monthly sales trends",
return_type="json"
)
# SQL Agent with Hugging Face for privacy
df = sql_agent_private(
hf_config=("your-huggingface-token", "mistralai/Mixtral-8x7B-Instruct-v0.1"),
db_path="path/to/your/database.db",
query="List customers in California",
return_type="dataframe",
use_local=True # For local processing
)
Customizing Model Parameters
model_kwargs = {
"temperature": 0.2,
"max_new_tokens": 1024,
"repetition_penalty": 1.1
}
response = dbagent_private(
hf_config=("your-huggingface-token", "mistralai/Mixtral-8x7B-Instruct-v0.1"),
db_path="path/to/your/database.db",
query="Summarize the sales data for the last quarter",
model_kwargs=model_kwargs
)
🔍 Choosing the Right Mode & Model
Modes
| Mode | Functions | Best For | Output |
|---|---|---|---|
| Explanatory | dbagent, dbagent_private |
Understanding data context | Natural language explanations with insights |
| SQL Agent | sql_agent, sql_agent_private |
Data analysis, integration | Raw data as DataFrame, dict, or JSON |
Recommended Hugging Face Models
| Model | Performance | Resource Usage | Best For |
|---|---|---|---|
| mistralai/Mixtral-8x7B-Instruct-v0.1 | ⭐⭐⭐⭐⭐ | 🖥️🖥️🖥️🖥️ | Best overall SQL generation |
| meta-llama/Llama-2-7b-chat-hf | ⭐⭐⭐⭐ | 🖥️🖥️🖥️ | Balance of performance and resources |
| Qwen/Qwen2-7B-Instruct | ⭐⭐⭐ | 🖥️🖥️ | Efficient for simpler queries |
📊 Supported Databases
Currently, NLMDB supports:
- SQLite ✅
Future releases will add support for:
- PostgreSQL 🔜
- MySQL 🔜
- Microsoft SQL Server 🔜
⚙️ Requirements
- Python 3.8+
- openai>=1.0.0
- langchain>=0.1.0
- langchain-core>=0.1.0
- langchain-community>=0.0.0
- langchain-huggingface>=0.0.1 (for Hugging Face integration)
- pandas>=1.0.0 (for DataFrame return type in SQL agent mode)
📜 License
MIT
🤝 Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
🙏 Acknowledgements
This library is built on top of:
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 nlmdb-1.3.7.tar.gz.
File metadata
- Download URL: nlmdb-1.3.7.tar.gz
- Upload date:
- Size: 20.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4979d617d8674d7add1d56a7470b49e6cbc3c749815dac0aa7ea316f22f8a707
|
|
| MD5 |
d0f1e96e9e5f9619afe2bf92dc933780
|
|
| BLAKE2b-256 |
6a3571bb2766b34f12f1318d0cd5d8d6c37673b73f27631ef2cc4b17842b75c8
|
File details
Details for the file nlmdb-1.3.7-py3-none-any.whl.
File metadata
- Download URL: nlmdb-1.3.7-py3-none-any.whl
- Upload date:
- Size: 24.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d3ddd4735a33e0e48406e0db804cf21aadf90839faaf8faec556169cef9de52f
|
|
| MD5 |
47762c7cd7f109f1ac64f02a022722c4
|
|
| BLAKE2b-256 |
b3da62a17386c44538ec3b62a9e8826fd14de1990031391024f57a1f72bb9318
|