-
Notifications
You must be signed in to change notification settings - Fork 29
Expand file tree
/
Copy pathDockerfile
More file actions
71 lines (56 loc) · 2.67 KB
/
Dockerfile
File metadata and controls
71 lines (56 loc) · 2.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
FROM python:3.13-slim
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
# Build-time args that will be copied into the image as environment variables.
# Users can pass these via `docker build --build-arg KEY=VALUE` to bake defaults.
ARG LLM_MODEL_NAME=gemini-2.0-flash
ARG LLM_TYPE=google
ARG LLM_TEMPERATURE=0.1
ARG PORT_NUM_APP=8000
ARG PORT_NUM_SEARXNG=8085
ARG HOST_APP=0.0.0.0
ARG HOST_SEARXNG=0.0.0.0
ARG EMBED_MODE=google
ARG EMBEDDING_MODEL_NAME=models/embedding-001
# Export non-secret build args as environment variables so model_config.py can read them at runtime
ENV LLM_MODEL_NAME=${LLM_MODEL_NAME}
ENV LLM_TYPE=${LLM_TYPE}
ENV LLM_TEMPERATURE=${LLM_TEMPERATURE}
ENV PORT_NUM_APP=${PORT_NUM_APP}
ENV PORT_NUM_SEARXNG=${PORT_NUM_SEARXNG}
ENV HOST_APP=${HOST_APP}
ENV HOST_SEARXNG=${HOST_SEARXNG}
ENV EMBED_MODE=${EMBED_MODE}
ENV EMBEDDING_MODEL_NAME=${EMBEDDING_MODEL_NAME}
# Install small set of system deps commonly needed by ML/audio packages
RUN apt-get update && \
apt-get install -y --no-install-recommends \
git \
wget \
ffmpeg \
build-essential \
libsndfile1 \
&& rm -rf /var/lib/apt/lists/*
# Use /app as the workdir so the Dockerfile can be built from the CoexistAI folder
WORKDIR /app
# Copy only requirements first to leverage Docker cache (build context is the CoexistAI folder)
COPY ./requirements.txt ./requirements.txt
RUN python -m pip install --upgrade pip setuptools wheel
# Copy application code (copy the current folder contents into /app)
COPY ./ ./
# Reproduce quick_setup.sh virtualenv installs inside the image (mirrors the script)
# Create a separate infinity_env and install packages there to avoid conflicts as in the script
RUN python3.13 -m venv /opt/infinity_env && \
/opt/infinity_env/bin/pip install --no-cache-dir 'infinity-emb[all]' && \
/opt/infinity_env/bin/pip install --no-cache-dir 'optimum==1.27.0' && \
/opt/infinity_env/bin/pip install --no-cache-dir 'transformers<4.49' && \
/opt/infinity_env/bin/pip install --no-cache-dir --upgrade "typer==0.19.1" "click>=8.1.3" || true
# Create a second venv similar to coexistaienv and install markitdown[all]
RUN python3.13 -m venv /opt/coexistaienv && \
/opt/coexistaienv/bin/pip install --no-cache-dir 'markitdown[all]' || true
# Now install the project requirements into the coexistaienv (matches quick_setup.sh order)
RUN /opt/coexistaienv/bin/pip install --no-cache-dir -r requirements.txt || true
# Entrypoint will be executed via shell; no need to force executable bit when host may mount files
EXPOSE 8000
# Invoke the entrypoint from the copied project path. The entrypoint lives at CoexistAI/entrypoint.sh
CMD ["sh", "/app/entrypoint.sh"]