Dockerfile 4.2 KB
Newer Older
Timothy J. Baek's avatar
Timothy J. Baek committed
1
2
# syntax=docker/dockerfile:1

Jannik Streidl's avatar
Jannik Streidl committed
3
######## WebUI frontend ########
Jannik S's avatar
Jannik S committed
4
FROM node:21-alpine3.19 as build
5

Timothy J. Baek's avatar
Timothy J. Baek committed
6
7
WORKDIR /app

8
9
10
11
#RUN apt-get update \ 
#    && apt-get install -y --no-install-recommends wget \ 
#    # cleanup
#    && rm -rf /var/lib/apt/lists/*
Jannik Streidl's avatar
Jannik Streidl committed
12

Timothy J. Baek's avatar
Timothy J. Baek committed
13
# wget embedding model weight from alpine (does not exist from slim-buster)
Jannik Streidl's avatar
Jannik Streidl committed
14
15
#RUN wget "https://chroma-onnx-models.s3.amazonaws.com/all-MiniLM-L6-v2/onnx.tar.gz" -O - | \
#    tar -xzf - -C /app
Timothy J. Baek's avatar
Timothy J. Baek committed
16

Xiaodong Ye's avatar
Xiaodong Ye committed
17
COPY package.json package-lock.json ./
18
RUN npm ci
19

20
21
COPY . .
RUN npm run build
Timothy J. Baek's avatar
Timothy J. Baek committed
22

Jannik Streidl's avatar
Jannik Streidl committed
23
######## WebUI backend ########
Timothy J. Baek's avatar
Timothy J. Baek committed
24
FROM python:3.11-slim-bookworm as base
Timothy J. Baek's avatar
Timothy J. Baek committed
25

Jannik Streidl's avatar
Jannik Streidl committed
26
27
28
## Basis ##
ENV ENV=prod \
    PORT=8080
Timothy J. Baek's avatar
Timothy J. Baek committed
29

Jannik Streidl's avatar
Jannik Streidl committed
30
31
32
## Basis URL Config ##
ENV OLLAMA_BASE_URL="/ollama" \
    OPENAI_API_BASE_URL=""
Timothy J. Baek's avatar
Timothy J. Baek committed
33

Jannik Streidl's avatar
Jannik Streidl committed
34
35
36
37
38
## API Key and Security Config ##
ENV OPENAI_API_KEY="" \
    WEBUI_SECRET_KEY="" \
    SCARF_NO_ANALYTICS=true \
    DO_NOT_TRACK=true
Timothy J. Baek's avatar
Timothy J. Baek committed
39

Jannik Streidl's avatar
Jannik Streidl committed
40
#### Preloaded models #########################################################
Jannik Streidl's avatar
Jannik Streidl committed
41
42
43
## whisper TTS Settings ##
ENV WHISPER_MODEL="base" \
    WHISPER_MODEL_DIR="/app/backend/data/cache/whisper/models"
44

Jannik Streidl's avatar
Jannik Streidl committed
45
## RAG Embedding Model Settings ##
46
47
# any sentence transformer model; models to use can be found at https://huggingface.co/models?library=sentence-transformers
# Leaderboard: https://huggingface.co/spaces/mteb/leaderboard 
48
# for better persormance and multilangauge support use "intfloat/multilingual-e5-large" (~2.5GB) or "intfloat/multilingual-e5-base" (~1.5GB)
49
# IMPORTANT: If you change the default model (all-MiniLM-L6-v2) and vice versa, you aren't able to use RAG Chat with your previous documents loaded in the WebUI! You need to re-embed them.
Jannik Streidl's avatar
Jannik Streidl committed
50
51
ENV RAG_EMBEDDING_MODEL="all-MiniLM-L6-v2" \
    RAG_EMBEDDING_MODEL_DIR="/app/backend/data/cache/embedding/models" \
Jannik Streidl's avatar
Jannik Streidl committed
52
53
54
55
56
57
58
    SENTENCE_TRANSFORMERS_HOME="/app/backend/data/cache/embedding/models" \
    # device type for whisper tts and embbeding models - "cpu" (default) or "mps" (apple silicon) - choosing this right can lead to better performance
    # Important:
    #  If you want to use CUDA you need to install the nvidia-container-toolkit (https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html) 
    #  you can set this to "cuda" but its recomended to use --build-arg CUDA_ENABLED=true flag when building the image
    RAG_EMBEDDING_MODEL_DEVICE_TYPE="cuda"
# device type for whisper tts and embbeding models - "cpu" (default), "cuda" (nvidia gpu and CUDA required) or "mps" (apple silicon) - choosing this right can lead to better performance
Jannik Streidl's avatar
Jannik Streidl committed
59
#### Preloaded models ##########################################################
60

Timothy J. Baek's avatar
Timothy J. Baek committed
61
WORKDIR /app/backend
62
# install python dependencies
Timothy J. Baek's avatar
Timothy J. Baek committed
63
COPY ./backend/requirements.txt ./requirements.txt
Timothy J. Baek's avatar
Timothy J. Baek committed
64

Jannik Streidl's avatar
Jannik Streidl committed
65
66
67
68
69
70
71
72
73
74
75
76
RUN pip3 install -r requirements.txt --no-cache-dir

RUN if [ "$RAG_EMBEDDING_MODEL_DEVICE_TYPE" = "cuda" ]; then \
        echo "CUDA enabled" && \
        pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117 --no-cache-dir; \
    else \
        pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu --no-cache-dir && \
        python -c "import os; from chromadb.utils import embedding_functions; sentence_transformer_ef = embedding_functions.SentenceTransformerEmbeddingFunction(model_name=os.environ['RAG_EMBEDDING_MODEL'], device=os.environ['RAG_EMBEDDING_MODEL_DEVICE_TYPE'])"; \
    fi

# preload tts model
RUN python -c "import os; from faster_whisper import WhisperModel; WhisperModel(os.environ['WHISPER_MODEL'], device='auto', compute_type='int8', download_root=os.environ['WHISPER_MODEL_DIR'])"
77

Jannik Streidl's avatar
Jannik Streidl committed
78
#  install required packages
Timothy J. Baek's avatar
Timothy J. Baek committed
79
RUN apt-get update \
Jannik Streidl's avatar
Jannik Streidl committed
80
81
82
83
84
    # Install pandoc and netcat
    && apt-get install -y --no-install-recommends pandoc netcat-openbsd \
    # for RAG OCR
    && apt-get install -y --no-install-recommends ffmpeg libsm6 libxext6 \
    # cleanup
Timothy J. Baek's avatar
Timothy J. Baek committed
85
86
    && rm -rf /var/lib/apt/lists/*

Jannik Streidl's avatar
Jannik Streidl committed
87

88

89
# copy embedding weight from build
Jannik Streidl's avatar
Jannik Streidl committed
90
91
# RUN mkdir -p /root/.cache/chroma/onnx_models/all-MiniLM-L6-v2
# COPY --from=build /app/onnx /root/.cache/chroma/onnx_models/all-MiniLM-L6-v2/onnx
92
93
94

# copy built frontend files
COPY --from=build /app/build /app/build
95
96
COPY --from=build /app/CHANGELOG.md /app/CHANGELOG.md
COPY --from=build /app/package.json /app/package.json
97
98

# copy backend files
Timothy J. Baek's avatar
Timothy J. Baek committed
99
100
COPY ./backend .

Jannik S's avatar
Jannik S committed
101
102
EXPOSE 8080

pandego's avatar
pandego committed
103
CMD [ "bash", "start.sh"]