Spaces:
Running
Running
File size: 2,374 Bytes
2f49513 53ea588 2f49513 53ea588 2f49513 53ea588 2f49513 53ea588 2f49513 53ea588 1e9838c 2f49513 53ea588 971559f 660e83c 53ea588 971559f 660e83c 53ea588 660e83c 41b6e84 53ea588 660e83c 2f49513 53ea588 2f49513 53ea588 2f49513 53ea588 1e9838c 2f49513 1e9838c 53ea588 2f49513 53ea588 |
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 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# Build argument to specify which example to use
ARG EXAMPLE_NAME=voice_agent_webrtc_langgraph
# Build UI assets
FROM node:18-alpine AS ui-builder
ARG EXAMPLE_NAME
WORKDIR /ui
# Install UI dependencies
COPY examples/${EXAMPLE_NAME}/ui/package*.json ./
RUN npm ci --no-audit --no-fund && npm cache clean --force
# Build UI
COPY examples/${EXAMPLE_NAME}/ui/ .
RUN npm run build
# Base image
FROM python:3.12-slim
# Build argument needs to be repeated in this stage
ARG EXAMPLE_NAME=voice_agent_webrtc_langgraph
# Environment setup
ENV PYTHONUNBUFFERED=1
ENV UV_NO_TRACKED_CACHE=1
ENV EXAMPLE_NAME=${EXAMPLE_NAME}
# System dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
libgl1 \
libglx-mesa0 \
curl \
wget \
ca-certificates \
ffmpeg \
git \
net-tools \
procps \
vim \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* \
&& pip install --no-cache-dir --upgrade pip uv
# Create non-root user (UID 1000) for provider runtime (container will run as UID 1000 on provider)
RUN useradd -m -u 1000 user
ENV HOME=/home/user
ENV PATH=$HOME/.local/bin:$PATH
ENV XDG_CACHE_HOME=$HOME/.cache
# App directory setup
WORKDIR /app
# App files
COPY --chown=user pyproject.toml uv.lock \
LICENSE README.md \
./
COPY --chown=user src/ ./src/
COPY --chown=user examples/${EXAMPLE_NAME} ./examples/${EXAMPLE_NAME}
# Copy built UI into example directory so FastAPI can serve it
COPY --from=ui-builder --chown=user /ui/dist /app/examples/${EXAMPLE_NAME}/ui/dist
# Example app directory
WORKDIR /app/examples/${EXAMPLE_NAME}
# Dependencies
RUN uv sync --frozen
RUN uv pip install -r agents/requirements.txt
# Ensure langgraph CLI is available at build time
RUN uv pip install -U langgraph
RUN chmod +x start.sh
# Fix ownership so runtime user can read caches and virtualenv
RUN mkdir -p /home/user/.cache/uv \
&& chown -R 1000:1000 /home/user/.cache \
&& if [ -d /app/examples/${EXAMPLE_NAME}/.venv ]; then chown -R 1000:1000 /app/examples/${EXAMPLE_NAME}/.venv; fi
# Port configuration (single external port for app)
EXPOSE 7860
# Healthcheck
HEALTHCHECK --interval=30s --timeout=10s --retries=3 --start-period=60s CMD curl -f http://localhost:7860/get_prompt || exit 1
# Start command (using sh to expand EXAMPLE_NAME variable)
CMD sh -c "/app/examples/${EXAMPLE_NAME}/start.sh"
|