# nl2ltl
**Repository Path**: mirrors_ibm/nl2ltl
## Basic Information
- **Project Name**: nl2ltl
- **Description**: Natural Language (NL) to Linear Temporal Logic (LTL)
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2022-10-24
- **Last Updated**: 2026-05-17
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
NL 2 LTL
[](https://img.shields.io/pypi/pyversions/nl2ltl)
[](https://img.shields.io/pypi/v/nl2ltl)
[](https://github.com/IBM/nl2ltl/actions/workflows/test.yml/badge.svg)
[](https://github.com/IBM/nl2ltl/actions/workflows/test_gpt.yml/badge.svg)
[](https://github.com/IBM/nl2ltl/actions/workflows/linting.yml/badge.svg)
[](https://github.com/IBM/nl2ltl/actions/workflows/docs.yml/badge.svg)
[](https://codecov.io/github.com/IBM/nl2ltl)
[](https://img.shields.io/github/license/IBM/nl2ltl?color=purple)
NL2LTL is an interface to translate natural language (NL) utterances to
linear temporal logic (LTL) formulas.
> 🏆 NL2LTL won the People's Choice Best System Demonstration Award Runner-Up in the ICAPS 2023 System Demonstration
> Track in Prague. Read more about it [here](https://icaps23.icaps-conference.org/demos/papers/6374_paper.pdf).
## Installation
- from PyPI:
```bash
pip install nl2ltl
```
- from source (`main` branch):
```bash
pip install git+https://github.com/IBM/nl2ltl.git
```
- or clone the repository and install the package:
```bash
git clone https://github.com/IBM/nl2ltl.git
cd nl2ltl
pip install -e .
```
## Quickstart
Once you have installed all dependencies you are ready to go with:
```python
from nl2ltl import translate
from nl2ltl.engines.gpt.core import GPTEngine, Models
from nl2ltl.filters.simple_filters import BasicFilter
from nl2ltl.engines.utils import pretty
engine = GPTEngine()
filter = BasicFilter()
utterance = "Eventually send me a Slack after receiving a Gmail"
ltlf_formulas = translate(utterance, engine, filter)
pretty(ltlf_formulas)
```
The `translate` function takes a natural language utterance, an engine and an
option filter, and outputs the best matching
[pylogics](https://github.com/whitemech/pylogics) LTL formulas.
**NOTE**: Before using the `NL2LTL` translation function, depending on the
engine you want to use, make sure all preconditions for such an engine are met.
For instance, Rasa requires a `.tar.gz` format trained model in the
`models/` folder to run. To train the model use the available NL2LTL `train(...)` API.
## NLU Engines
- [x] [GPT-3.x](https://openai.com/api/) large language models
- [x] [GPT-4](https://openai.com/api/) large language model
- [x] [Rasa](https://rasa.com/) intents/entities classifier (to use Rasa, please install it with `pip install -e ".[rasa]"`)
- [ ] [Watson Assistant](https://www.ibm.com/products/watson-assistant) intents/entities classifier -- Planned
**NOTE**: To use OpenAI GPT models don't forget to add the `OPEN_API_KEY` environment
variable with:
```bash
export OPENAI_API_KEY=your_api_key
```
## Write your own Engine
You can easily write your own engine (i.e., intents/entities classifier,
language model, etc.) by implementing the Engine interface:
```python
from nl2ltl.engines.base import Engine
from pylogics.syntax.base import Formula
class MyEngine(Engine):
def translate(self, utterance: str, filtering: Filter) -> Dict[Formula, float]:
"""From NL to LTL."""
```
Then, use it as a parameter in the main entry point:
```python
my_engine = MyEngine()
ltl_formulas = translate(utterance, engine=my_engine)
```
## Write your own Filter
You can easily write your own filtering algorithm by implementing
the Filter interface:
```python
from nl2ltl.filters.base import Filter
from pylogics.syntax.base import Formula
class MyFilter(Filter):
def enforce(
self, output: Dict[Formula, float], entities: Dict[str, float], **kwargs
) -> Dict[Formula, float]:
"""Filtering algorithm."""
```
Then, use it as a parameter in the main entry point:
```python
my_engine = MyEngine()
my_filter = MyFilter()
ltl_formulas = translate(utterance, engine=my_engine, filter=my_filter)
```
## Development
Contributions are welcome! Here's how to set up the development environment:
- set up your preferred virtualenv environment
- clone the repo: `git clone https://github.com/IBM/nl2ltl.git && cd nl2ltl`
- install dependencies: `pip install -e .`
- install dev dependencies: `pip install -e ".[dev]"`
- install pre-commit: `pre-commit install`
- sign-off your commits using the `-s` flag in the commit message to be compliant with
the [DCO](https://developercertificate.org/)
## Tests
To run tests: `tox`
To run the code tests only: `tox -e py310`
## Docs
To build the docs: `mkdocs build`
To view documentation in a browser: `mkdocs serve`
and then go to [http://localhost:8000](http://localhost:8000)
## Citing
```
@inproceedings{icaps2023fc,
author = {Francesco Fuggitti and Tathagata Chakraborti},
title = {{NL2LTL} -- A Python Package for Converting Natural Language ({NL}) Instructions to Linear Temporal Logic ({LTL}) Formulas},
booktitle = {{ICAPS}},
year = {2023},
note = {Best System Demonstration Award Runner-Up.},
url_code = {https://github.com/IBM/nl2ltl},
}
```
and
```
@inproceedings{aaai2023fc,
author = {Francesco Fuggitti and Tathagata Chakraborti},
title = {{NL2LTL} -- A Python Package for Converting Natural Language ({NL}) Instructions to Linear Temporal Logic ({LTL}) Formulas},
booktitle = {{AAAI}},
year = {2023},
note = {System Demonstration.},
url_code = {https://github.com/IBM/nl2ltl},
}
```