File size: 2,172 Bytes
aa15811
a6cdaab
e3310d6
 
 
aa15811
e3310d6
 
 
aa15811
e29e453
aa15811
 
e29e453
aa15811
e29e453
836ae39
 
 
e3310d6
8d4088c
 
 
 
a6cdaab
7ebd053
a6cdaab
 
 
 
e3310d6
a6cdaab
e3310d6
 
 
 
 
 
a6cdaab
 
 
e3310d6
 
1a4d163
aa15811
e3310d6
 
73d7d5f
836ae39
 
e29e453
e3310d6
a6cdaab
 
 
 
 
 
 
 
 
836ae39
dc49b69
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
# Restore from 4bac0e2 + patch frontend + backend models + auto-continue
FROM node:20-alpine AS frontend-builder
RUN apk add --no-cache git python3
RUN git clone --depth 1 https://huggingface.co/spaces/smolagents/ml-intern /source

# Patch frontend: add OpenRouter models
COPY patch_frontend.py /tmp/patch_frontend.py
RUN python3 /tmp/patch_frontend.py

# Patch auto-continue feature for free models
COPY patch_use_agent_chat_full.py /tmp/patch_use_agent_chat_full.py
RUN python3 /tmp/patch_use_agent_chat_full.py

COPY patch_chat_input.py /tmp/patch_chat_input.py
RUN python3 /tmp/patch_chat_input.py

COPY patch_sse_transport.py /tmp/patch_sse_transport.py
RUN python3 /tmp/patch_sse_transport.py

WORKDIR /source/frontend
RUN npm config set fetch-timeout 120000 && \
    npm config set fetch-retries 3 && \
    npm install && \
    npm run build

# Stage 2: Production
FROM python:3.12-slim
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
RUN useradd -m -u 1000 user
WORKDIR /app
RUN apt-get update && apt-get install -y --no-install-recommends git curl ca-certificates && rm -rf /var/lib/apt/lists/*

RUN git clone --depth 1 https://huggingface.co/spaces/smolagents/ml-intern /tmp/source && \
    cp /tmp/source/pyproject.toml /tmp/source/uv.lock ./ && \
    cp -r /tmp/source/agent ./agent && \
    cp -r /tmp/source/backend ./backend && \
    cp -r /tmp/source/configs ./configs && \
    rm -rf /tmp/source

RUN uv sync --no-dev --frozen

COPY --from=frontend-builder /source/frontend/dist ./static/
COPY configs/frontend_agent_config.json ./configs/frontend_agent_config.json

# Patch backend: accept new model IDs + auto-continue
COPY patch_models.py /tmp/patch_models.py
RUN python /tmp/patch_models.py

COPY patch_agent_loop.py /tmp/patch_agent_loop.py
RUN python /tmp/patch_agent_loop.py || echo "agent_loop patch not applied (may need adjustment)"

RUN mkdir -p /app/session_logs && chown -R user:user /app

USER user
ENV HOME=/home/user \
    PYTHONUNBUFFERED=1 \
    PYTHONPATH=/app \
    PATH="/app/.venv/bin:$PATH"

EXPOSE 7860
WORKDIR /app/backend
# python:slim does not include bash by default; start.sh is POSIX-compatible.
CMD ["sh", "start.sh"]