dsllm


Namedsllm JSON
Version 0.1.0 PyPI version JSON
download
home_pageNone
SummaryGenerate Domain Specific Language statements from Natural Language input using LLMs
upload_time2025-09-01 14:29:58
maintainerNone
docs_urlNone
authorNone
requires_python>=3.9
licenseMIT
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

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