Skip to content

Development Environment

Getting started with core LMQL development.

GPU-Enabled Anaconda

To setup a conda environment for local LMQL development with GPU support, run the following commands:

# prepare conda environment
conda env create -f scripts/conda/requirements.yml -n lmql
conda activate lmql

# registers the `lmql` command in the current shell
source scripts/activate-dev.sh

INFO

Operating System: The GPU-enabled version of LMQL was tested to work on Ubuntu 22.04 with CUDA 12.0 and Windows 10 via WSL2 and CUDA 11.7. The no-GPU version (see below) was tested to work on Ubuntu 22.04 and macOS 13.2 Ventura or Windows 10 via WSL2.

Anaconda Development without GPU

This section outlines how to setup an LMQL development environment without local GPU support. Note that LMQL without local GPU support only supports the use of API-integrated models like openai/gpt-3.5-turbo-instruct.

To setup a conda environment for LMQL with GPU support, run the following commands:

# prepare conda environment
conda env create -f scripts/conda/requirements-no-gpu.yml -n lmql-no-gpu
conda activate lmql-no-gpu

# registers the `lmql` command in the current shell
source scripts/activate-dev.sh

With Nix

If you have Nix installed, this can be used to invoke LMQL, even if you don't have any of its dependencies previously installed! We try to test Nix support on ARM-based MacOS and Intel-based Linux; bugfixes and contributions for other targets are welcome.

Most targets within the flake have several variants:

  • default targets (nix run github:eth-sri/lmql#playground, nix run github:eth-sri/lmql#python, nix run github:eth-sri/lmql#lmtp-server, nix develop github:eth-sri/lmql#lmql) download all optional dependencies for maximum flexibility; these are also available with the suffix -all (playground-all, python-all, lmtp-server-all).
  • -basic targets only support OpenAI (and any future models that require no optional dependencies).
  • -hf targets only support OpenAI and Hugging Face models.
  • -replicate targets are only guaranteed to support Hugging Face models remoted via Replicate. (In practice, at present, they may also support local Hugging Face models; but this is subject to change).
  • -llamaCpp targets are only guaranteed to support llama.cpp. (In practice, again, Hugging Face may be available as well).

In all of these cases, github:eth-sri/lmql may be replaced with a local filesystem path; so if you're inside a checked-out copy of the LMQL source tree, you can use nix run .#playground to run the playground/debugger from that tree.