Name | dsllm JSON |
Version |
0.1.0
JSON |
| download |
home_page | None |
Summary | Generate Domain Specific Language statements from Natural Language input using LLMs |
upload_time | 2025-09-01 14:29:58 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.9 |
license | MIT |
keywords |
dsl
llm
sql
natural-language
code-generation
|
VCS |
 |
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# dsllm - Domain Specific Language from LLM
[](https://www.python.org/downloads/)
[](https://opensource.org/licenses/MIT)
Generate Domain Specific Language (DSL) statements from Natural Language input using Large Language Models (LLMs).
## Overview
`dsllm` is a Python library that converts natural language descriptions into structured DSL statements. Currently supports SQL generation with OpenAI models, designed to be extensible to other DSLs and LLM providers.
## Features
- **SQL Generation**: Convert natural language to SQL queries
- **OpenAI Integration**: Built-in support for GPT-3.5/4 models
- **Context Injection**: Support for database schemas and constraints
- **Validation**: Pre-flight and post-flight validation checks
- **Safety Features**: Read-only mode, dangerous operation detection
- **Retry Mechanism**: Automatic retries with exponential backoff
## Installation
```bash
pip install dsllm
```
## Quick Start
```python
import asyncio
import os
from dsllm import DSLLMGenerator, OpenAIProvider, SQLGenerator
async def main():
# Initialize components
provider = OpenAIProvider(api_key=os.getenv("OPENAI_API_KEY"))
sql_generator = SQLGenerator()
generator = DSLLMGenerator(provider=provider, dsl_generator=sql_generator)
# Generate SQL from natural language
result = await generator.generate(
natural_language="Find all active users who registered this month",
context={
"schema": '''
CREATE TABLE users (
id SERIAL PRIMARY KEY,
email VARCHAR(255),
is_active BOOLEAN DEFAULT true,
created_at TIMESTAMP
);
'''
}
)
print("Generated SQL:")
print(result.dsl_statement)
# Run the example
asyncio.run(main())
```
## Basic Usage
### Simple Query Generation
```python
result = await generator.generate("Show me all users")
print(result.dsl_statement) # SELECT * FROM users;
```
### With Context and Constraints
```python
result = await generator.generate(
"Find recent orders with high values",
context={"tables": ["orders", "customers"]},
constraints={"max_rows": 50}
)
```
### Read-Only Mode
```python
# Enable read-only mode for safety
sql_generator = SQLGenerator(enforce_read_only=True)
generator = DSLLMGenerator(provider=provider, dsl_generator=sql_generator)
# Only SELECT statements will be generated
result = await generator.generate("Get user data") # ✅ Works
result = await generator.generate("Delete old records") # ❌ Fails validation
```
## Configuration
### Environment Variables
- `OPENAI_API_KEY`: Your OpenAI API key
### Provider Options
```python
provider = OpenAIProvider(
model="gpt-4", # Model to use
temperature=0.1, # Generation temperature
max_tokens=500 # Maximum tokens
)
```
## Roadmap
- **Additional DSLs**: GraphQL, MongoDB queries, Elasticsearch DSL
- **More LLM Providers**: Anthropic Claude, Google PaLM, Azure OpenAI
- **Advanced Features**: Agentic loops, automated testing, observability
- **Enhanced Validation**: Semantic validation, performance analysis
## Contributing
Contributions are welcome! Please see our [Contributing Guide](CONTRIBUTING.md) for details.
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
## Author
**Frenk Dragar** ([@frenkd](https://github.com/frenkd))
Raw data
{
"_id": null,
"home_page": null,
"name": "dsllm",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": "Frenk Dragar <frenkd@users.noreply.github.com>",
"keywords": "dsl, llm, sql, natural-language, code-generation",
"author": null,
"author_email": "Frenk Dragar <frenkd@users.noreply.github.com>",
"download_url": "https://files.pythonhosted.org/packages/43/f1/194333bbb096139cbea14389d94caf613c2dc0a9ac2b27671df3a19e16cf/dsllm-0.1.0.tar.gz",
"platform": null,
"description": "# dsllm - Domain Specific Language from LLM\n\n[](https://www.python.org/downloads/)\n[](https://opensource.org/licenses/MIT)\n\nGenerate Domain Specific Language (DSL) statements from Natural Language input using Large Language Models (LLMs).\n\n## Overview\n\n`dsllm` is a Python library that converts natural language descriptions into structured DSL statements. Currently supports SQL generation with OpenAI models, designed to be extensible to other DSLs and LLM providers.\n\n## Features\n\n- **SQL Generation**: Convert natural language to SQL queries\n- **OpenAI Integration**: Built-in support for GPT-3.5/4 models\n- **Context Injection**: Support for database schemas and constraints\n- **Validation**: Pre-flight and post-flight validation checks\n- **Safety Features**: Read-only mode, dangerous operation detection\n- **Retry Mechanism**: Automatic retries with exponential backoff\n\n## Installation\n\n```bash\npip install dsllm\n```\n\n## Quick Start\n\n```python\nimport asyncio\nimport os\nfrom dsllm import DSLLMGenerator, OpenAIProvider, SQLGenerator\n\nasync def main():\n # Initialize components\n provider = OpenAIProvider(api_key=os.getenv(\"OPENAI_API_KEY\"))\n sql_generator = SQLGenerator()\n generator = DSLLMGenerator(provider=provider, dsl_generator=sql_generator)\n \n # Generate SQL from natural language\n result = await generator.generate(\n natural_language=\"Find all active users who registered this month\",\n context={\n \"schema\": '''\n CREATE TABLE users (\n id SERIAL PRIMARY KEY,\n email VARCHAR(255),\n is_active BOOLEAN DEFAULT true,\n created_at TIMESTAMP\n );\n '''\n }\n )\n \n print(\"Generated SQL:\")\n print(result.dsl_statement)\n\n# Run the example\nasyncio.run(main())\n```\n\n## Basic Usage\n\n### Simple Query Generation\n\n```python\nresult = await generator.generate(\"Show me all users\")\nprint(result.dsl_statement) # SELECT * FROM users;\n```\n\n### With Context and Constraints\n\n```python\nresult = await generator.generate(\n \"Find recent orders with high values\",\n context={\"tables\": [\"orders\", \"customers\"]},\n constraints={\"max_rows\": 50}\n)\n```\n\n### Read-Only Mode\n\n```python\n# Enable read-only mode for safety\nsql_generator = SQLGenerator(enforce_read_only=True)\ngenerator = DSLLMGenerator(provider=provider, dsl_generator=sql_generator)\n\n# Only SELECT statements will be generated\nresult = await generator.generate(\"Get user data\") # \u2705 Works\nresult = await generator.generate(\"Delete old records\") # \u274c Fails validation\n```\n\n## Configuration\n\n### Environment Variables\n\n- `OPENAI_API_KEY`: Your OpenAI API key\n\n### Provider Options\n\n```python\nprovider = OpenAIProvider(\n model=\"gpt-4\", # Model to use\n temperature=0.1, # Generation temperature\n max_tokens=500 # Maximum tokens\n)\n```\n\n## Roadmap\n\n- **Additional DSLs**: GraphQL, MongoDB queries, Elasticsearch DSL\n- **More LLM Providers**: Anthropic Claude, Google PaLM, Azure OpenAI\n- **Advanced Features**: Agentic loops, automated testing, observability\n- **Enhanced Validation**: Semantic validation, performance analysis\n\n## Contributing\n\nContributions are welcome! Please see our [Contributing Guide](CONTRIBUTING.md) for details.\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Author\n\n**Frenk Dragar** ([@frenkd](https://github.com/frenkd))\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Generate Domain Specific Language statements from Natural Language input using LLMs",
"version": "0.1.0",
"project_urls": {
"Homepage": "https://github.com/frenkd/dsllm",
"Issues": "https://github.com/frenkd/dsllm/issues",
"Repository": "https://github.com/frenkd/dsllm"
},
"split_keywords": [
"dsl",
" llm",
" sql",
" natural-language",
" code-generation"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "df8e39d26c7fbf993447dcee32cd092614ce7ed8be25177641e08058b45fec83",
"md5": "13fec87ea8bed3cd57a45eab6636c1f9",
"sha256": "7f4c39425ab348ddd7244beb457037a75f352adbd3c6e121d19aca71dd80c2df"
},
"downloads": -1,
"filename": "dsllm-0.1.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "13fec87ea8bed3cd57a45eab6636c1f9",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 13709,
"upload_time": "2025-09-01T14:29:57",
"upload_time_iso_8601": "2025-09-01T14:29:57.758721Z",
"url": "https://files.pythonhosted.org/packages/df/8e/39d26c7fbf993447dcee32cd092614ce7ed8be25177641e08058b45fec83/dsllm-0.1.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "43f1194333bbb096139cbea14389d94caf613c2dc0a9ac2b27671df3a19e16cf",
"md5": "7f1a65584b82c7c89f7d576340cfec93",
"sha256": "e98982ec330caa3a388366fd532654b16bcf8b31b5fd101bc318a2c78a5f2720"
},
"downloads": -1,
"filename": "dsllm-0.1.0.tar.gz",
"has_sig": false,
"md5_digest": "7f1a65584b82c7c89f7d576340cfec93",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 17069,
"upload_time": "2025-09-01T14:29:58",
"upload_time_iso_8601": "2025-09-01T14:29:58.816891Z",
"url": "https://files.pythonhosted.org/packages/43/f1/194333bbb096139cbea14389d94caf613c2dc0a9ac2b27671df3a19e16cf/dsllm-0.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-09-01 14:29:58",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "frenkd",
"github_project": "dsllm",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "dsllm"
}