Skip to main content
dbally logo

Efficient, consistent and secure library for querying structured data with natural language

Homepage | Documentation | Contact

HuggingFace - Spaces PyPI - License PyPI - Version PyPI - Python Version


db-ally is an LLM-powered library for creating natural language interfaces to data sources. While it occupies a similar space to the text-to-SQL solutions, its goals and methods are different. db-ally allows developers to outline specific use cases for the LLM to handle, detailing the desired data format and the possible operations to fetch this data.

db-ally effectively shields the complexity of the underlying data source from the model, presenting only the essential information needed for solving the specific use cases. Instead of generating arbitrary SQL, the model is asked to generate responses in a simplified query language.

The benefits of db-ally can be described in terms of its four main characteristics:

  • Consistency: db-ally ensures predictable output formats and confines operations to those predefined by developers, making it particularly well-suited for applications with precise requirements on their behavior or data format
  • Security: db-ally prevents direct database access and arbitrary SQL execution, bolstering system safety
  • Efficiency: db-ally hides most of the underlying database complexity, enabling the LLM to concentrate on essential aspects and improving performance
  • Portability: db-ally introduces an abstraction layer between the model and the data, ensuring easy integration with various database technologies and other data sources.

Quickstart

In db-ally, developers define their use cases by implementing views, filters and aggregations. A list of possible filters and aggregations is presented to the LLM in terms of IQL (Intermediate Query Language). Views are grouped and registered within a collection, which then serves as an entry point for asking questions in natural language.

This is a basic implementation of a db-ally view for an example HR application, which retrieves candidates from an SQL database:

from dbally import decorators, SqlAlchemyBaseView, create_collection
from dbally.llms.litellm import LiteLLM
from sqlalchemy import create_engine

class CandidateView(SqlAlchemyBaseView):
    """
    A view for retrieving candidates from the database.
    """

    def get_select(self):
        """
        Defines which columns to select.
        """
        return sqlalchemy.select(Candidate.id, Candidate.name, Candidate.country)

    @decorators.view_filter()
    def from_country(self, country: str):
        """
        Filter candidates from a specific country.
        """
        return Candidate.country == country


llm = LiteLLM(model_name="gpt-3.5-turbo")
engine = create_engine("sqlite:///examples/recruiting/data/candidates.db")

my_collection = create_collection("collection_name", llm)
my_collection.add(CandidateView, lambda: CandidateView(engine))

my_collection.ask("Find candidates from United States")

For a concrete step-by-step example on how to use db-ally, go to Quickstart guide. For a more learning-oriented experience, check our db-ally Tutorial.

Motivation

db-ally was originally developed at deepsense.ai. In our work on various projects, we frequently encountered the need to retrieve data from data sources, typically databases, in response to natural language queries.

The standard approach to this issue involves using the text-to-SQL technique. While this method is powerful, it is also complex and challenging to control. Often, the results were unsatisfactory because the Language Model lacked the necessary context to understand the specific requirements of the application and the business logic behind the data.

This led us to experiment with a more structured approach. In this method, the developer defines the specific use cases for the Language Model to handle, detailing the desired data format and the possible operations to retrieve this data. This approach proved to be more efficient, predictable, and easier to manage, making it simpler to integrate with the rest of the system.

Eventually, we decided to create a library that would allow us to use this approach in a more systematic way, and we made it open-source for the community.

Installation

To install db-ally, execute the following command:

pip install dbally

Additionally, you can install one of our extensions to use specific features.

  • dbally[litellm]: Use 100+ LLMs
  • dbally[faiss]: Use Faiss indexes for similarity search
  • dbally[langsmith]: Use LangSmith for query tracking
pip install dbally[litellm,faiss,langsmith]

License

db-ally is released under MIT license.

How db-ally documentation is organized

  • Quickstart - Get started with db-ally in a few minutes
  • Concepts - Understand the main concepts behind db-ally
  • How-to guides - Learn how to use db-ally in your projects
  • Tutorials - Follow step-by-step tutorials to learn db-ally
  • API reference - Explore the underlying API of db-ally

Roadmap

db-ally is actively developed and maintained by a core team at deepsense.ai and a community of contributors.

You can find a list of planned features and integrations in the Roadmap.

Metadata

Release files for dbally 0.8.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dbally 0.8.0
File Size Uploaded
dbally-0.8.0.tar.gz 70.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for dbally 0.8.0
File Interpreter ABI Platform
dbally-0.8.0-py2.py3-none-any.whl Python 2, Python 3 none any Details

Total release size: 165.6 kB

Release files / dbally-0.8.0.tar.gz

Download URL dbally-0.8.0.tar.gz
Size 70.0 kB
Tags Source
SHA-256 checksum
How to use checksums
b41d7cfa70ae97dcc6ae0a16876fa0c949d103e6bedf874f73d88ff7af9d86fb
BLAKE2b-256 checksum
How to use checksums
f1b6b5509ac41239489a93735c3997669d52bfae421e0d3457044b5288d891c2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.9

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 16, 2025.

Transparency log

Release files / dbally-0.8.0-py2.py3-none-any.whl

Download URL dbally-0.8.0-py2.py3-none-any.whl
Size 95.6 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
116503820ab91a89c9bcefff585704a4de1377ae99b143a24f54f0aba25dcc94
BLAKE2b-256 checksum
How to use checksums
7a9fdcd273ad531dabbe1a378bf93bf4b8b931c1b379202687b08f3e3101529e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.9

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 16, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

0.8.0 This release

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page