$git clone https://github.com/gepromptet/promptolutionPromptolution is a unified, modular framework for prompt optimization built for researchers and advanced practitioners who want full control over their experimental setup. Unlike end-to-end application frameworks with high abstraction, promptolution focuses exclusively on the
| 1 |  |
| 2 | [](https://github.com/automl/promptolution/actions/workflows/ci.yml) |
| 3 | [](https://github.com/automl/promptolution/actions/workflows/docs.yml) |
| 4 | [](https://pypi.org/project/promptolution/) |
| 5 |  |
| 6 |  |
| 7 | [](https://colab.research.google.com/github/automl/promptolution/blob/main/tutorials/getting_started.ipynb) |
| 8 | |
| 9 |  |
| 10 | |
| 11 | <p align="center"> |
| 12 | <img height="60" alt="lmu_logo" src="https://github.com/user-attachments/assets/5aecd0d6-fc2d-48b2-b395-d1877578a3c5" /> |
| 13 | <img height="60" alt="mcml" src="https://github.com/user-attachments/assets/d9f3b18e-a5ec-4c3f-b449-e57cb977f483" /> |
| 14 | <img height="60" alt="ellis_logo" src="https://github.com/user-attachments/assets/60654a27-0f8f-4624-a1d5-5122f2632bec" /> |
| 15 | <img height="60" alt="uni_freiburg_color" src="https://github.com/user-attachments/assets/f5eabbd2-ae6a-497b-857b-71958ed77335" /> |
| 16 | <img height="60" alt="tum_logo" src="https://github.com/user-attachments/assets/982ec2f0-ec14-4dc2-8d75-bfae09d4fa73" /> |
| 17 | </p> |
| 18 | |
| 19 | ## 🚀 What is Promptolution? |
| 20 | |
| 21 | **Promptolution** is a unified, modular framework for prompt optimization built for researchers and advanced practitioners who want full control over their experimental setup. Unlike end-to-end application frameworks with high abstraction, promptolution focuses exclusively on the optimization stage, providing a clean, transparent, and extensible API. It allows for simple prompt optimization for one task up to large-scale reproducible benchmark experiments. |
| 22 | |
| 23 | <img width="808" height="356" alt="promptolution_framework" src="https://github.com/user-attachments/assets/e3d05493-30e3-4464-b0d6-1d3e3085f575" /> |
| 24 | |
| 25 | ### Key Features |
| 26 | |
| 27 | * Implementation of many current prompt optimizers out of the box. |
| 28 | * Unified LLM backend supporting API-based models, Local LLMs, and vLLM clusters. |
| 29 | * Built-in response caching to save costs and parallelized inference for speed. |
| 30 | * Detailed logging and token usage tracking for granular post-hoc analysis. |
| 31 | |
| 32 | Have a look at our [Release Notes](https://automl.github.io/promptolution/release-notes/) for the latest updates to promptolution. |
| 33 | |
| 34 | ## 📚 Scientific Publications Powered by Promptolution |
| 35 | |
| 36 | - **CANTANTE: Optimizing Agentic Systems via Contrastive Credit Attribution** — Zehle, 2026. [arXiv](https://arxiv.org/abs/2605.13295) |
| 37 | - **MO-CAPO: Multi-Objective Cost-Aware Prompt Optimization** — Büssing et al., 2026. [arXiv](https://arxiv.org/abs/2605.18869) |
| 38 | - **promptolution: A Unified, Modular Framework for Prompt Optimization** — Zehle et al., 2026. [EACL 2026](https://aclanthology.org/2026.eacl-demo.21/) |
| 39 | - **Can Calibration of Positional Encodings Enhance Long Context Utilization?** — Zehle & Aßenmacher, 2026. [EACL 2026](https://aclanthology.org/2026.findings-eacl.120/) |
| 40 | - **Disambiguation-Centric Finetuning Makes Enterprise Tool-Calling LLMs More Realistic and Less Risky** — Hathidara et al., 2025. [arXiv](https://arxiv.org/abs/2507.03336) |
| 41 | - **CAPO: Cost-Aware Prompt Optimization** — Zehle et al., 2025. [AutoML 2025](https://proceedings.mlr.press/v293/zehle25a.html) |
| 42 | |
| 43 | ## 🔧 Installation and Quickstart |
| 44 | |
| 45 | ``` |
| 46 | pip install promptolution[api] |
| 47 | ``` |
| 48 | |
| 49 | For local inference, add `[transformers]` (HuggingFace) or `[vllm]` (vLLM serving), or both. |
| 50 | |
| 51 | ```python |
| 52 | import pandas as pd |
| 53 | from promptolution.utils import ExperimentConfig |
| 54 | from promptolution.helpers import run_experiment |
| 55 | |
| 56 | # DataFrame with columns "x" (input) and "y" (label) |
| 57 | df = pd.read_csv("yo |