“It is often said that if something can be described, then it can be automated.
The problem is that describing something is a very complex matter.”
Rhetor is an Integrated Modelling Environment for researchers, students, and practitioners who model and solve mixed-integer linear programming (MILP) problems. It supports a subset of the Optimisation Programming Language (OPL) syntax and is built on PyOPL, a Python library for parsing and solving OPL-like mathematical programming models. Rhetor also provides optional GenAI assistance for drafting, checking, and refining mathematical models.
Install:
pip install rhetor
Start Rhetor:
pyopl
To enable GenAI features, set at least one of the following environment variables before starting Rhetor:
OPENAI_API_KEY — for OpenAI modelsGEMINI_API_KEY — for Google Geminiollama locally.
Example (macOS / bash):
export OPENAI_API_KEY="sk-..."
Alternatively, you can use rhetor in Jupyter notebook
or you can use the Rhetor Skills and PyOPL MCP to integrate Rhetor with your favorite agentic workflow (e.g. Github Copilot).
Rhetor can solve supported models with Gurobi or the SciPy/HiGHS backend. Optional GenAI features support OpenAI and Google Gemini through API keys, or Ollama for local models.
Rhetor embeds GenAI features that support the modelling process: features can be explored within the system in a conversational fashion. A complete user guide and examples for PyOPL are available at:
A selection of LinkedIn posts about Rhetor is available below.
Rhetor is released under the MIT License.
@misc{rossi2026grammarawareliterategenerativemathematical,
title={Grammar-Aware Literate Generative Mathematical Programming with Compiler-in-the-Loop},
author={Roberto Rossi and Steven D. Prestwich},
year={2026},
eprint={2601.17670},
archivePrefix={arXiv},
primaryClass={cs.PL},
url={https://arxiv.org/abs/2601.17670},
}