Add `chat-ui` and `chat-ui-db` docker images (#613)
Browse files* Add a `Dockerfile.local` image to build
* Add a build & publish workflow
* fix workflow
* Add support for local mongoDB
* Fix problem with POST requests
* use slim image
* Set mistral to be the default model in .env
* Fix entrypoint
* Revert change regarding config folder
* replace env variable by build arg for DB and update work
* old mention of `conf` folder in readme
* env to .env
* Revert readme changes
* lint
- .dockerignore +2 -0
- .env +30 -30
- conf/.env.ci → .env.ci +0 -0
- .github/workflows/build-image.yml +103 -0
- .github/workflows/lint-and-test.yml +1 -1
- .gitignore +3 -3
- Dockerfile.local +28 -0
- README.md +1 -1
- entrypoint.sh +23 -0
.dockerignore
CHANGED
@@ -6,3 +6,5 @@ LICENSE
|
|
6 |
README.md
|
7 |
node_modules/
|
8 |
.svelte-kit/
|
|
|
|
|
|
6 |
README.md
|
7 |
node_modules/
|
8 |
.svelte-kit/
|
9 |
+
.env*
|
10 |
+
!.env
|
.env
CHANGED
@@ -44,39 +44,39 @@ REJECT_UNAUTHORIZED=true
|
|
44 |
|
45 |
# 'name', 'userMessageToken', 'assistantMessageToken' are required
|
46 |
MODELS=`[
|
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 |
OLD_MODELS=`[]`# any removed models, `{ name: string, displayName?: string, id?: string }`
|
79 |
-
TASK_MODEL=
|
80 |
|
81 |
PUBLIC_ORIGIN=#https://huggingface.co
|
82 |
PUBLIC_SHARE_PREFIX=#https://hf.co/chat
|
|
|
44 |
|
45 |
# 'name', 'userMessageToken', 'assistantMessageToken' are required
|
46 |
MODELS=`[
|
47 |
+
{
|
48 |
+
"name": "mistralai/Mistral-7B-Instruct-v0.1",
|
49 |
+
"displayName": "mistralai/Mistral-7B-Instruct-v0.1",
|
50 |
+
"description": "Mistral 7B is a new Apache 2.0 model, released by Mistral AI that outperforms Llama2 13B in benchmarks.",
|
51 |
+
"websiteUrl": "https://mistral.ai/news/announcing-mistral-7b/",
|
52 |
+
"preprompt": "",
|
53 |
+
"chatPromptTemplate" : "<s>{{#each messages}}{{#ifUser}}[INST] {{#if @first}}{{#if @root.preprompt}}{{@root.preprompt}}\n{{/if}}{{/if}}{{content}} [/INST]{{/ifUser}}{{#ifAssistant}}{{content}}</s>{{/ifAssistant}}{{/each}}",
|
54 |
+
"parameters": {
|
55 |
+
"temperature": 0.1,
|
56 |
+
"top_p": 0.95,
|
57 |
+
"repetition_penalty": 1.2,
|
58 |
+
"top_k": 50,
|
59 |
+
"truncate": 3072,
|
60 |
+
"max_new_tokens": 1024,
|
61 |
+
"stop": ["</s>"]
|
62 |
+
},
|
63 |
+
"promptExamples": [
|
64 |
+
{
|
65 |
+
"title": "Write an email from bullet list",
|
66 |
+
"prompt": "As a restaurant owner, write a professional email to the supplier to get these products every week: \n\n- Wine (x10)\n- Eggs (x24)\n- Bread (x12)"
|
67 |
+
}, {
|
68 |
+
"title": "Code a snake game",
|
69 |
+
"prompt": "Code a basic snake game in python, give explanations for each step."
|
70 |
+
}, {
|
71 |
+
"title": "Assist in a task",
|
72 |
+
"prompt": "How do I make a delicious lemon cheesecake?"
|
73 |
+
}
|
74 |
+
]
|
75 |
}
|
|
|
76 |
]`
|
77 |
+
|
78 |
OLD_MODELS=`[]`# any removed models, `{ name: string, displayName?: string, id?: string }`
|
79 |
+
TASK_MODEL= # name of the model used for tasks such as summarizing title, creating query, etc.
|
80 |
|
81 |
PUBLIC_ORIGIN=#https://huggingface.co
|
82 |
PUBLIC_SHARE_PREFIX=#https://hf.co/chat
|
conf/.env.ci → .env.ci
RENAMED
File without changes
|
.github/workflows/build-image.yml
ADDED
@@ -0,0 +1,103 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
name: Buid and Publish Image
|
2 |
+
|
3 |
+
on:
|
4 |
+
push:
|
5 |
+
branches:
|
6 |
+
- "main"
|
7 |
+
pull_request:
|
8 |
+
branches:
|
9 |
+
- "*"
|
10 |
+
paths:
|
11 |
+
- "Dockerfile.local"
|
12 |
+
- "entrypoint.sh"
|
13 |
+
workflow_dispatch:
|
14 |
+
release:
|
15 |
+
types: [published, edited]
|
16 |
+
|
17 |
+
jobs:
|
18 |
+
build-and-publish-image-with-db:
|
19 |
+
runs-on: ubuntu-latest
|
20 |
+
steps:
|
21 |
+
- name: Checkout
|
22 |
+
uses: actions/checkout@v4
|
23 |
+
- name: Docker metadata
|
24 |
+
id: meta
|
25 |
+
uses: docker/metadata-action@v5
|
26 |
+
with:
|
27 |
+
images: |
|
28 |
+
ghcr.io/huggingface/chat-ui-db
|
29 |
+
tags: |
|
30 |
+
type=ref,event=branch
|
31 |
+
type=ref,event=pr
|
32 |
+
type=semver,pattern={{version}}
|
33 |
+
type=semver,pattern={{major}}
|
34 |
+
type=semver,pattern={{major}}.{{minor}}
|
35 |
+
|
36 |
+
- name: Set up QEMU
|
37 |
+
uses: docker/setup-qemu-action@v3
|
38 |
+
|
39 |
+
- name: Set up Docker Buildx
|
40 |
+
uses: docker/setup-buildx-action@v3
|
41 |
+
|
42 |
+
- name: Login to GitHub Container Registry
|
43 |
+
if: github.event_name != 'pull_request'
|
44 |
+
uses: docker/login-action@v3
|
45 |
+
with:
|
46 |
+
registry: ghcr.io
|
47 |
+
username: ${{ github.repository_owner }}
|
48 |
+
password: ${{ secrets.GITHUB_TOKEN }}
|
49 |
+
|
50 |
+
- name: Build and Publish Docker Image
|
51 |
+
uses: docker/build-push-action@v5
|
52 |
+
with:
|
53 |
+
context: .
|
54 |
+
file: Dockerfile.local
|
55 |
+
push: ${{ github.event_name != 'pull_request' }}
|
56 |
+
tags: ${{ steps.meta.outputs.tags }}
|
57 |
+
labels: ${{ steps.meta.outputs.labels }}
|
58 |
+
platforms: linux/amd64,linux/arm64
|
59 |
+
build-args: |
|
60 |
+
- INCLUDE_DB=true
|
61 |
+
build-and-publish-image-nodb:
|
62 |
+
runs-on: ubuntu-latest
|
63 |
+
steps:
|
64 |
+
- name: Checkout
|
65 |
+
uses: actions/checkout@v4
|
66 |
+
- name: Docker metadata
|
67 |
+
id: meta
|
68 |
+
uses: docker/metadata-action@v5
|
69 |
+
with:
|
70 |
+
images: |
|
71 |
+
ghcr.io/huggingface/chat-ui
|
72 |
+
tags: |
|
73 |
+
type=ref,event=branch
|
74 |
+
type=ref,event=pr
|
75 |
+
type=semver,pattern={{version}}
|
76 |
+
type=semver,pattern={{major}}
|
77 |
+
type=semver,pattern={{major}}.{{minor}}
|
78 |
+
|
79 |
+
- name: Set up QEMU
|
80 |
+
uses: docker/setup-qemu-action@v3
|
81 |
+
|
82 |
+
- name: Set up Docker Buildx
|
83 |
+
uses: docker/setup-buildx-action@v3
|
84 |
+
|
85 |
+
- name: Login to GitHub Container Registry
|
86 |
+
if: github.event_name != 'pull_request'
|
87 |
+
uses: docker/login-action@v3
|
88 |
+
with:
|
89 |
+
registry: ghcr.io
|
90 |
+
username: ${{ github.repository_owner }}
|
91 |
+
password: ${{ secrets.GITHUB_TOKEN }}
|
92 |
+
|
93 |
+
- name: Build and Publish Docker Image
|
94 |
+
uses: docker/build-push-action@v5
|
95 |
+
with:
|
96 |
+
context: .
|
97 |
+
file: Dockerfile.local
|
98 |
+
push: ${{ github.event_name != 'pull_request' }}
|
99 |
+
tags: ${{ steps.meta.outputs.tags }}
|
100 |
+
labels: ${{ steps.meta.outputs.labels }}
|
101 |
+
platforms: linux/amd64,linux/arm64
|
102 |
+
build-args: |
|
103 |
+
- INCLUDE_DB=false
|
.github/workflows/lint-and-test.yml
CHANGED
@@ -53,4 +53,4 @@ jobs:
|
|
53 |
steps:
|
54 |
- uses: actions/checkout@v3
|
55 |
- name: Build Docker image
|
56 |
-
run: docker build --secret id=DOTENV_LOCAL,src
|
|
|
53 |
steps:
|
54 |
- uses: actions/checkout@v3
|
55 |
- name: Build Docker image
|
56 |
+
run: docker build --secret id=DOTENV_LOCAL,src=.env.ci -t chat-ui:latest .
|
.gitignore
CHANGED
@@ -5,10 +5,10 @@ node_modules
|
|
5 |
/package
|
6 |
.env
|
7 |
.env.*
|
8 |
-
!.env.example
|
9 |
-
!.env.template
|
10 |
vite.config.js.timestamp-*
|
11 |
vite.config.ts.timestamp-*
|
12 |
SECRET_CONFIG
|
13 |
.idea
|
14 |
-
|
|
|
|
|
|
5 |
/package
|
6 |
.env
|
7 |
.env.*
|
|
|
|
|
8 |
vite.config.js.timestamp-*
|
9 |
vite.config.ts.timestamp-*
|
10 |
SECRET_CONFIG
|
11 |
.idea
|
12 |
+
!.env.ci
|
13 |
+
!.env
|
14 |
+
!.env.template
|
Dockerfile.local
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
ARG INCLUDE_DB=false
|
2 |
+
FROM mongo:latest as mongo
|
3 |
+
|
4 |
+
FROM node:20-slim as local_db_false
|
5 |
+
|
6 |
+
FROM node:20-slim as local_db_true
|
7 |
+
|
8 |
+
RUN apt-get update
|
9 |
+
RUN apt-get install gnupg curl -y
|
10 |
+
|
11 |
+
COPY --from=mongo /usr/bin/mongo* /usr/bin/
|
12 |
+
|
13 |
+
FROM local_db_${INCLUDE_DB} as final
|
14 |
+
ARG INCLUDE_DB=false
|
15 |
+
ENV INCLUDE_DB=${INCLUDE_DB}
|
16 |
+
|
17 |
+
WORKDIR /app
|
18 |
+
|
19 |
+
COPY --link --chown=1000 package-lock.json package.json ./
|
20 |
+
RUN --mount=type=cache,target=/app/.npm \
|
21 |
+
npm set cache /app/.npm && \
|
22 |
+
npm ci
|
23 |
+
|
24 |
+
# copy the rest of the files, run regardless of
|
25 |
+
COPY --chown=1000 --link . .
|
26 |
+
RUN chmod +x /app/entrypoint.sh
|
27 |
+
|
28 |
+
CMD ["/bin/bash", "-c", "/app/entrypoint.sh"]
|
README.md
CHANGED
@@ -24,7 +24,7 @@ A chat interface using open source models, eg OpenAssistant or Llama. It is a Sv
|
|
24 |
5. [Deploying to a HF Space](#deploying-to-a-hf-space)
|
25 |
6. [Building](#building)
|
26 |
|
27 |
-
##
|
28 |
|
29 |
If you don't want to configure, setup, and launch your own Chat UI yourself, you can use this option as a fast deploy alternative.
|
30 |
|
|
|
24 |
5. [Deploying to a HF Space](#deploying-to-a-hf-space)
|
25 |
6. [Building](#building)
|
26 |
|
27 |
+
## No Setup Deploy
|
28 |
|
29 |
If you don't want to configure, setup, and launch your own Chat UI yourself, you can use this option as a fast deploy alternative.
|
30 |
|
entrypoint.sh
ADDED
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
if test -z "${DOTENV_LOCAL}" ; then
|
2 |
+
if ! test -f "/app/.env.local" ; then
|
3 |
+
echo "DOTENV_LOCAL was not found in the ENV variables and .env.local is not set using a bind volume. We are using the default .env config."
|
4 |
+
fi;
|
5 |
+
else
|
6 |
+
echo "DOTENV_LOCAL was found in the ENV variables. Creating .env.local file."
|
7 |
+
cat <<< "$DOTENV_LOCAL" > /app/.env.local
|
8 |
+
fi;
|
9 |
+
|
10 |
+
if [ "$INCLUDE_DB" = "true" ] ; then
|
11 |
+
echo "INCLUDE_DB is set to true. Appending MONGODB_URL"
|
12 |
+
|
13 |
+
touch /app/.env.local
|
14 |
+
echo -e "\nMONGODB_URL=mongodb://localhost:27017" >> /app/.env.local
|
15 |
+
|
16 |
+
mkdir -p /data/db
|
17 |
+
mongod &
|
18 |
+
echo "Starting local MongoDB instance"
|
19 |
+
|
20 |
+
fi;
|
21 |
+
|
22 |
+
npm run build
|
23 |
+
npm run preview -- --host 0.0.0.0 --port 3000
|