vectorlite 0.1.5

A high-performance, in-memory vector database optimized for AI agent workloads
Documentation
FROM rust:1.81-slim AS builder

# Install nightly toolchain for edition 2024 support
RUN rustup toolchain install nightly && rustup default nightly

ARG MODEL_NAME=sentence-transformers/all-MiniLM-L6-v2
ARG FEATURES=""
ARG DEFAULT_MODEL=sentence-transformers/all-MiniLM-L6-v2

RUN apt-get update && apt-get install -y \
    pkg-config \
    libssl-dev \
    build-essential \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /app

COPY Cargo.toml Cargo.lock ./
RUN mkdir src && echo "fn main() {}" > src/main.rs

# Build dependencies first (this layer will be cached if Cargo.toml doesn't change)
RUN if [ "$MODEL_NAME" != "$DEFAULT_MODEL" ]; then \
        DEFAULT_EMBEDDING_MODEL="$(basename ${MODEL_NAME})" cargo build --release --features "${FEATURES},custom-model"; \
    else \
        cargo build --release --features "${FEATURES}"; \
    fi && rm -rf src

COPY src ./src

RUN if [ "$MODEL_NAME" != "$DEFAULT_MODEL" ]; then \
        DEFAULT_EMBEDDING_MODEL="$(basename ${MODEL_NAME})" cargo build --release --features "${FEATURES},custom-model"; \
    else \
        cargo build --release --features "${FEATURES}"; \
    fi

FROM python:3.11-slim AS model-downloader

ARG MODEL_NAME=sentence-transformers/all-MiniLM-L6-v2

RUN pip install --no-cache-dir huggingface_hub[cli]

WORKDIR /app

RUN mkdir -p models

RUN huggingface-cli download ${MODEL_NAME} \
    --local-dir models/$(basename ${MODEL_NAME}) \
    --local-dir-use-symlinks False

FROM debian:bookworm-slim

RUN apt-get update && apt-get install -y \
    ca-certificates \
    curl \
    && rm -rf /var/lib/apt/lists/*

RUN groupadd -r vectorlite && useradd -r -g vectorlite vectorlite

WORKDIR /app

COPY --from=builder /app/target/release/vectorlite /usr/local/bin/vectorlite
COPY --from=model-downloader /app/models /app/models

RUN chown -R vectorlite:vectorlite /app
USER vectorlite

EXPOSE 3001

ENV RUST_LOG=info
ENV RUST_BACKTRACE=1

HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
    CMD curl -f http://localhost:3001/health || exit 1

CMD ["/usr/local/bin/vectorlite", "--host", "0.0.0.0", "--port", "3001"]