FROM ubuntu:24.04 AS dev # libclang-dev && git needed for llamacpp engine deps in dynamo-run build RUN apt-get update && \ DEBIAN_FRONTEND=noninteractive apt-get install -yq python3-dev python3-pip python3-venv libucx0 libclang-dev git COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/ RUN mkdir /opt/dynamo && \ uv venv /opt/dynamo/venv --python 3.12 && \ . /opt/dynamo/venv/bin/activate && \ uv pip install pip ENV VIRTUAL_ENV=/opt/dynamo/venv ENV PATH="${VIRTUAL_ENV}/bin:${PATH}" # Rust build/dev dependencies RUN apt update -y && \ apt install --no-install-recommends -y \ wget \ build-essential \ protobuf-compiler \ cmake \ libssl-dev \ pkg-config ENV RUSTUP_HOME=/usr/local/rustup \ CARGO_HOME=/usr/local/cargo \ PATH=/usr/local/cargo/bin:$PATH \ RUST_VERSION=1.86.0 \ RUSTARCH=x86_64-unknown-linux-gnu RUN wget --tries=3 --waitretry=5 "https://static.rust-lang.org/rustup/archive/1.28.1/${RUSTARCH}/rustup-init" && \ echo "a3339fb004c3d0bb9862ba0bce001861fe5cbde9c10d16591eb3f39ee6cd3e7f *rustup-init" | sha256sum -c - && \ chmod +x rustup-init && \ ./rustup-init -y --no-modify-path --profile minimal --default-toolchain $RUST_VERSION --default-host ${RUSTARCH} && \ rm rustup-init && \ chmod -R a+w $RUSTUP_HOME $CARGO_HOME WORKDIR /workspace ENV DYNAMO_HOME=/workspace COPY . /workspace/ ARG CARGO_BUILD_JOBS ENV CARGO_TARGET_DIR=/workspace/target RUN cargo build --release --locked --features mistralrs,python && \ cargo doc --no-deps && \ cp target/release/dynamo-run /usr/local/bin && \ cp target/release/http /usr/local/bin && \ cp target/release/llmctl /usr/local/bin && \ cp target/release/metrics /usr/local/bin && \ cp target/release/mock_worker /usr/local/bin RUN uv build --wheel --out-dir /workspace/dist && \ uv pip install /workspace/dist/ai_dynamo*any.whl